我是Python的新手(我来自Java),我在使用Python3.2中的模拟时遇到了一个问题。
以下是代码:
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进行模拟)。但是当我执行测试时,我收到了这个:
TypeError: __init__() got an unexpected keyword argument 'fileobj'
在这种情况下,我被迫使用命名参数调用GzipFile对象。
有没有一种很好的方法来模拟这个GzipFile对象(和类似的对象)?
答案 0 :(得分:0)
您看到的TypeError
是由于您将myclass._gzipfile
分配给mockito.mock
类对象。因此,当my_method
使用关键字参数_gzipfile
调用fileobj=data
时,它实际上正在调用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()