[英]py.test patch on fixture
我使用以下命令來模擬py.test測試的常量值:
@patch('ConstantsModule.ConstantsClass.DELAY_TIME', 10)
def test_PowerUp():
...
thing = Thing.Thing()
assert thing.a == 1
這樣可以在測試和Thing中使用DELAY_TIME,這是我的預期。
我想對這個文件中的所有測試都這樣做,所以我試過了
@patch('ConstantsModule.ConstantsClass.DELAY_TIME', 10)
@pytest.fixture(autouse=True)
def NoDelay():
pass
但這似乎沒有同樣的效果。
這是一個類似的問題: pytest fixture中的pytest-mock mocker ,但模擬似乎是以非裝飾方式完成的。
我會說通過裝飾器修補不是這里的最佳方法。 我使用上下文管理器:
import pytest
from unittest.mock import patch
@pytest.fixture(autouse=True)
def no_delay():
with patch('ConstantsModule.ConstantsClass.DELAY_TIME', 10):
yield
這樣,在測試拆卸時可以完全恢復修補。
pytest通過monkeypatch fixture提供內置的補丁支持。 因此,要修復文件中所有測試的常量,您可以創建以下autouse fixture:
@pytest.fixture(autouse=True)
def no_delay(monkeypatch):
monkeypatch.setattr(ConstantsModule.ConstantsClass, 'DELAY_TIME', 10)
如果您不想在測試中導入ConstantsModule
,則可以使用字符串,請參閱完整的API參考 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.