我正在学习如何使用py.test
在Python中完成测试。我正在尝试测试在使用mock
等其他库时非常常见的特定情况。具体来说,测试函数或方法是否使用正确的参数调用另一个callable。不需要返回值,只需确认被测方法正确调用即可。
以下是docs:
的直接示例>>> class ProductionClass:
... def method(self):
... self.something(1, 2, 3)
... def something(self, a, b, c):
... pass
...
>>> real = ProductionClass()
>>> real.something = MagicMock()
>>> real.method()
>>> real.something.assert_called_once_with(1, 2, 3)
是否可以使用monkeypatch
或来自fixtures
的{{1}}来执行此操作,而无需有效编写自己的模拟类?我搜索过这个特定用例,但无法找到一个例子。 py.test
是否鼓励采用另类方式来执行此类代码?
答案 0 :(得分:3)
您可以使用pytest-mock,这样可以轻松地将mock包用作pytest fixture。
答案 1 :(得分:1)
好。我提出了似乎有用的东西,但我认为它类似于模拟:
@pytest.fixture
def argtest():
class TestArgs(object):
def __call__(self, *args):
self.args = list(args)
return TestArgs()
class ProductionClass:
def method(self):
self.something(1,2,3)
def something(self, a, b, c):
pass
def test_example(monkeypatch, argtest):
monkeypatch.setattr("test_module.ProductionClass.something", argtest)
real = ProductionClass()
real.method()
assert argtest.args == [1,2,3]