패치를 사용하여 메소드 내에서 모의 객체를 반환하려고합니다. 기본 구조는 다음과 같습니다.모의 패치가 __init__.py 클래스에서 작동하지 않습니다.
MyCode.py
class MyClass:
def __init__(self, first_name, last_name):
self.first = first_name
self.last = last_name
def get_greeting(self):
return 'Hello {f} {l}'.format(f=self.first, l=self.last)
def get_new_greeting(first_name, last_name):
obj = MyClass(first_name, last_name)
return obj.get_greeting()
my_code_test.py
import unittest
from mock import Mock, patch
import my_code
class TestMyCode(unittest.TestCase):
def setUp(self):
pass
@patch('my_code.MyClass')
def test_get_greeting(self, MockClass):
instance = MockClass.return_value
mock_greeting = 'Hello Me'
instance.get_greeting.return_value = mock_greeting
greeting = my_code.get_new_greeting('john', 'doe')
self.assertEqual(greeting, mock_greeting)
if __name__ == '__main__':
unittest.main()
위 코드는 저에게 잘 작동합니다. 그러나 테스트 할 실제 코드에 동일한 패턴을 적용하면 실제 객체 (모의 객체가 아닌)가 테스트중인 메소드에 반환됩니다. 나는 어떤 차이도 볼 수 없다. 유일한 차이점은 실제 클래스가 .py 파일에 정의되어 있다는 것입니다. 이것이 차이를 만들지 모르겠다. 이전에 본 적이 있습니까?
주 : 실제 LIB는 twilio 3.3.5이고 나는 그것을 알아 냈 파이썬 2.6.5 장고 1.3.1 및 모의 0.7.2
코드가 아닌 작동하지 않는 코드를 게시해야 할 수도 있습니다. –
@DanielRoseman 매우 유효한 포인트. 내가이 접근법을 사용한 이유는 twilio 꾸러미를 갖고있는 사람들이 거의 없을 것이라고 생각했기 때문입니다 (비록 virtualenv를 사용한다면 큰 문제는 아니지만) twilio 패키지를 설치하지 않으려 고 할지도 모릅니다. 내가해야 할 일의 기본 원칙. 답장을 보내 주셔서 감사합니다. –