【发布时间】:2021-07-17 20:09:56
【问题描述】:
pytest 是否提供类似unittest.mock 的功能来检查模拟是否实际调用过一次(或使用某个参数调用一次)?
示例源代码:
my_package/my_module.py
from com.abc.validation import Validation
class MyModule:
def __init__(self):
pass
def will_call_other_package(self):
val = Validation()
val.do()
def run(self):
self.will_call_other_package()
以上源代码的示例测试代码:
test_my_module.py
import pytest
from pytest_mock import mocker
from my_package.my_module import MyModule
@pytest.fixture
def mock_will_call_other_package(mocker):
mocker.patch('my_package.my_module.will_call_other_package')
@pytest.mark.usefixtures("mock_will_call_other_package")
class TestMyModule:
def test_run(self):
MyModule().run()
#check `will_call_other_package` method is called.
#Looking for something similar to what unittest.mock provide
#mock_will_call_other_package.called_once
【问题讨论】:
-
您可以像往常一样使用
unittest.mock和pytest。还有pytest-mock插件提供mocker固定装置,它基本上是unittest.mock周围的薄包装。 -
如果我使用
unittest.mock,它会扼杀我开始使用固定装置的全部目的(重新使用模拟)你能告诉我一个如何使用@实现这一点的例子987654333@? -
您可以将模拟放入夹具中。我明天可以给你看一个例子,而不是现在在电脑上。
标签: python pytest pytest-mock