假设我有一个fixture
来模拟一个使用monkeypatch
的类
# conftest.py
@pytest.fixture
def mock_dummyclass(monkeypatch):
def mock_function():
return None
monkeypatch.setattr(dummypackage, "dummyclass", mock_function)
现在,我必须在我的测试中使用这个夹具,以便模拟这个类
#test_dummy.py
@pytest.mark.usefixtures("mock_dummyclass")
class TestManyDummyMethods:
def test_dummy_one():
import dummypackage # Flag A
def test_dummy_two():
import dummypackage # Flag B
...
def test_dummy_n():
import dummypackage # Flag N
正如您在标记行中所看到的,我必须在每个函数中导入此模块dummypackage
,以确保在导入模块之前应用该装置(否则该装置将无效)
在类内导入dummypackage
会起作用,但在函数内调用self.dummypackage
似乎也不是很优雅
有没有更优雅的方法来实现这一点
注释:monkeypatch
库似乎不再维护unittest.mock
可能会提供您所需要的一切。我会尽量避免使用依赖于将模块作为测试的一部分导入的解决方案,因为如果出于其他原因(例如,导入其他函数)导入该模块,则该解决方案将失败
我正在使用
os
作为一个例子,因为它存在并使其可复制修补的最佳方式似乎取决于您如何从另一个模块导入
示例1:
target_module1.py
(从os.path
导入join
方法):这需要我们修补
target_module1.py
的join
方法:target_module1_test.py
:示例2:
target_module2.py
(导入os
模块):这允许我们在
os.path
上修补join
方法:target_module2_test.py
:这假设您不需要修补在模块级别(即导入时)使用的类或方法
相关问题 更多 >
编程相关推荐