2011-08-15 13 views
1

私はPythonに慣れていません(私はJavaからです)、私はPython3.2でモックを使用する際に問題に直面しています。ここでPython3でコンストラクタを使ってオブジェクトをモックする方法は?

は、コードは次のとおりです。

import gzip  

class MyClass: 

    _content = None 

    _gzipfile = gzip.GzipFile 

    def __init__(self, content): 
     self._content = content 

    def my_method(self): 
     # Code ... 
     gzipper = self._gzipfile(fileobj=data) 
     return gzipper.read() 


import unittest 
from mockito import * 

class MyClassTest(unittest.TestCase): 

    def my_method_test(self): 
     gzipfile = mock 
     myclass = MyClass() 
     myclass._gzipfile = mock 
     myclass.my_method 

私はユニット私のメソッドをテストしたいと思います(私はモックのためmockito libにを使用しています)。私は名前付きパラメータとのGzipFileオブジェクトを呼び出すことを強制しています。この場合、

TypeError: __init__() got an unexpected keyword argument 'fileobj' 

:私は、テストを実行したときしかし、私はこれを受信します。

このGzipFileオブジェクト(および同様のもの)をモックする良い方法はありますか?

+2

「__init」はタイプミスですか、実際のミスですか? – Arafangion

+0

それはタイプミスではなく、二重アンダースコアはイタリック体のテキストになります。私はそれらをエスケープする方法を知らないので... – Guillaume

+0

ああ、その場合、私は 'fileobj'引数。 – Arafangion

答えて

0

TypeErrorは、myclass._gzipfilemockito.mockクラスオブジェクトに割り当てているために表示されます。したがって、my_methodがキーワード引数fileobj=dataを使用して_gzipfileを呼び出すと、実際にはmockito.mockクラスが呼び出され、この引数を理解できない__init__メソッドが呼び出されます。

何かこれはうまくいくはずです。それはgzip.GzipFileに依存しているので、まだ理想的な単体テストではありませんが、起動するのに役立ちます。

import gzip 

class MyClass(object): 
    def __init__(self, content, file): 
     self._content = content 
     self._gzipper = gzip.GzipFile(filename=file) 
    def my_method(self): 
     # Code ... 
     return self._gzipper.read() 

import unittest 
from mockito import * 

class TestMyClass(unittest.TestCase): 
    def setUp(self): 
     self.my_class = MyClass('some content', 'file') 

    def test_my_method(self): 
    self.my_class._gzipper = mock() 
     when(self.my_class._gzipper).read().thenReturn('gzipper read return') 
     data = self.my_class.my_method() 
     self.assertEqual(data, 'gzipper read return') 

if __name__ == '__main__': 
    unittest.main() 
関連する問題