나는 파이썬 파일이 a.py
두 개의 클래스가 들어 A
와 B
.
class A(object):
def method_a(self):
return "Class A method a"
class B(object):
def method_b(self):
a = A()
print a.method_a()
나는 조롱 method_b
하여 수업 에서 unittest 하고 싶습니다 . 이를위한 파일의 내용은 다음과 같습니다 .B
A
testa.py
import unittest
import mock
import a
class TestB(unittest.TestCase):
@mock.patch('a.A')
def test_method_b(self, mock_a):
mock_a.method_a.return_value = 'Mocked A'
b = a.B()
b.method_b()
if __name__ == '__main__':
unittest.main()
나는 Mocked A
출력을 기대합니다 . 그러나 내가 얻는 것은 :
<MagicMock name='A().method_a()' id='4326621392'>
내가 어디에서 잘못하고 있습니까?
답변
이 경우 테스트중인 코드 @mock.patch('a.A')
의 클래스 A
를 mock_a
.
에 B.method_b
당신이 설정 한 다음 a = A()
지금이다, a = mock_a()
– 즉 a
는 IS return_value
의 mock_a
. 이 값을 지정하지 않았으므로 일반입니다 MagicMock
. 이것도 구성되지 않았으므로 MagicMock
메서드를 호출 할 때 기본 응답을 얻 습니다.
대신 구성 할 의를 당신도 같이 할 수있는 적절한 방법을 가지고 :return_value
mock_a
mock_a().method_a.return_value = 'Mocked A'
# ^ note parentheses
또는 더 명시 적으로 :
mock_a.return_value.method_a.return_value = 'Mocked A'
코드는 a = A
(인스턴스를 생성하지 않고 클래스를 할당하는) a.method_a()
경우에 작동했을 것이고 , 그러면 모의 메서드를 트리거했을 것입니다.