Ben*_*den 4 python unit-testing mocking
使用 patch 作为装饰器时,可以更改修补类或函数的测试参数名称。
@patch('module.ClassName2')
@patch('module.ClassName1')
def test(MockClass1, MockClass2):
MockClass1.test.return_value = 'testing'
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法在文档中找到如何在使用patch.multiple.
@patch.multiple('module.ClassName', foo=DEFAULT, bar=DEFAULT)
def test(foo, bar):
foo.return_value = 'foo'
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,测试中的参数必须是fooand bar。是否有任何干净的方法来允许它们以更清晰的区分使用,例如mock_foo?
在测试的一部分需要原始类或方法的情况下,这也很方便,避免导入 from module import Class as OriginalClass
提前致谢。
不和......是的:
mock源代码,您会发现无法更改attribute_name遵循一个简单的例子来说明如何做到这一点......我知道这可能不是你正在寻找的,但它是唯一的方法。
@patch.multiple('module.ClassName', foo=DEFAULT, bar=DEFAULT)
def test(**mocks):
mock_foo, mock_bar = mocks["foo"], mocks["bar"]
mock_foo.return_value = 'foo'
mock_bar.return_value = 'bar'
Run Code Online (Sandbox Code Playgroud)
如果您patch.multiple用作上下文管理器,这是获取模拟的唯一方法,那么这两种方法是一致的
def test():
with patch.multiple('module.ClassName', foo=DEFAULT, bar=DEFAULT) as mocks:
mock_foo, mock_bar = mocks["foo"], mocks["bar"]
mock_foo.return_value = 'foo'
mock_bar.return_value = 'bar'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4424 次 |
| 最近记录: |