簡體   English   中英

夾具上的py.test補丁

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM