실제로 액션을 제거하지 않고 테스트 케이스에 assert_call*
헬퍼를 가져올 수 있도록 객체를 패치하는 명확한 방법이 있습니까? 나는 다음과 같은 테스트를 통과 얻을 수있는 @patch
라인을 수정하는 방법을 예를 들어파이썬 모의 - 구현을 방해하지 않고 메소드 패칭
:
from unittest import TestCase
from mock import patch
class Potato(object):
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(TestCase):
@patch.object(Potato, 'foo')
def test_something(self, mock):
spud = Potato()
forty_two = spud.foo(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
아마 해킹 수를이 함께 side_effect
를 사용하여,하지만 난 거기에 기대했다가 작동 더 좋은 방법이 될 것입니다 등의 기능 classmethods, staticmethods, 언 바운드 방법 모두에 같은 방식으로,
'foo'와'bar'가 올바르게 정의되지 않았습니다. 그들은'def foo (self, n)'과'def bar (self, n)'이어야합니다. – chepner
예, 고마워 ... 고정 – wim
또한,'foo'는 호출 된 것이기 때문에 테스트 자체가 호출되고 있기 때문에 테스트중인 다른 코드보다는 호출 할 것이 많습니다. 마찬가지로,'forty_two'가 테스트 된 코드가 아닌 여러분의 * test *에 의해 특정 값으로 설정되는 것을 테스트하는 것은별로 가치가없는 것처럼 보입니다. – chepner