2011-08-15 5 views
1

저는 Python을 처음 접했고 (저는 Java에서 왔어요) 파이썬 3.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

TypeErrormyclass._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() 
관련 문제