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()