함수에 대한 모든 참조를 파이썬에서 모의 객체로 대체하는 방법은 무엇입니까?함수를 파이썬에서 unittesting을위한 mock 객체로 바꾸는 방법
패브릭 스크립트에 대한 unittest를 작성하려고합니다. 특히 fabric.api.run
을 실행 대신 명령을 기록한 mock 버전으로 바꾸고 싶습니다. 그러나 필자는이 방법을 사용하여 원단을 참조하는 모든 코드를 다시 작성할 필요가 없습니다.
import fabric.api
_run = fabric.api.run
fabric.api.run = my_mock_run_function
을하지만 다른 모듈 fabric.api을 가져 오기 전에이 실행됩니다 보장 할 수 없기 때문에, 많은 코드는 여전히 실제 run
기능을 사용하고 있습니다 :
나는 일을 시도했습니다.
이from fabric.api import run
당신이 당신의 모듈이 실행 기능의있는 로컬 참조 패치해야합니다 : 사용 unittest.mock.patch
import fabric.api
import unittest
from unittest.mock import Mock, patch
class TestCases(unittest.TestCase):
@patch('fabric.api.run')
def test_test(self):
self.assertTrue(True)
'mock'은 파이썬 3.3 이전의 [타사 모듈] (http://www.voidspace.org.uk/python/mock/index.html)입니다. OP는 아마도 그가 제공 한 샘플 코드에서'patch = '에 대한 키워드 인수로'new = my_mock_run_function'을 원할 것이다. – dano
솔루션을 사용하여'fabric.api'를 패치 할 수 있었지만 네이티브'fabric.api.run' 함수가 여전히 호출되어 테스트 중간에 ssh를 통해 연결을 시도합니다. 어떻게 이것을 피할 수 있습니까? – amhed
'fabric.api.local'과 동일한 문제가 있습니다.이 해결책은 작동하지 않습니다. – giorgiosironi