저는 py.test를 사용하고 테스트 함수에 객체를 주입하는 funcarg 접근법을 정말 좋아합니다. 필자가 테스트 한 결과, 외부 의존성이 많았 기 때문에 모의 객체로 작업해야한다. monkeypatch를 사용하여 mock 객체로 특정 속성을 대체합니다.py.test 커스텀 funcargs에서 monkeypatch 사용
내가 가진 문제는 특정 funcarg을 사용하고 항상 동일한 속성을 패치해야한다는 테스트가 자주 발생한다는 것입니다. 지금까지 모든 테스트 함수에서 속성을 대체했습니다.
funcarg 함수에서 monkeypatch를 사용하고 개별 테스트에서이 중복 코드를 제거 할 수 있습니까?
import sys
import pytest
from mock import Mock
#----------------------------------------------------------------------
def pytest_funcarg__api(request):
""""""
api = myclass()
#do some initialisation...
return api
#----------------------------------------------------------------------
def test_bla1(monkeypatch, api):
""""""
monkeypatch.setattr(api,"get_external_stuff",Mock())
monkeypatch.setattr(api,"morestuff",Mock())
api.do_something1()
assert not api.a
#----------------------------------------------------------------------
def test_bla2(monkeypatch, api):
""""""
monkeypatch.setattr(api,"get_external_stuff",Mock())
monkeypatch.setattr(api,"morestuff",Mock())
api.do_something2()
assert api.b
if __name__=='__main__':
pytest.main(args=["-v",sys.argv[0]])
나는 이것이 더 우아하다는 것에 동의한다. 어떻게 든이 문서를 읽을 때 이것을 놓쳤습니다 ... – circus