我使用py.test,真的很喜歡funcarg方法將對象注入測試函數。 在我的測試中,我需要使用Mock對象,因爲我有很多外部依賴項。我使用monkeypatch來替換模擬對象的某些屬性。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 2011-05-18 09:01:07