[python] Python은 return_value 대신 MagicMock 객체를 반환합니다.

나는 파이썬 파일이 a.py두 개의 클래스가 들어 AB.

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 하고 싶습니다 . 이를위한 파일의 내용은 다음과 같습니다 .BAtesta.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')의 클래스 Amock_a.

B.method_b 당신이 설정 한 다음 a = A()지금이다, a = mock_a()– 즉 a는 IS return_valuemock_a. 이 값을 지정하지 않았으므로 일반입니다 MagicMock. 이것도 구성되지 않았으므로 MagicMock메서드를 호출 할 때 기본 응답을 얻 습니다.

대신 구성 할 의를 당신도 같이 할 수있는 적절한 방법을 가지고 :return_valuemock_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()경우에 작동했을 것이고 , 그러면 모의 메서드를 트리거했을 것입니다.


답변