Python模拟补丁.multiple参数名称

2024-09-30 05:19:54 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用patch作为装饰器时,可以更改修补的类或函数的测试参数名称。在

@patch('module.ClassName2')
@patch('module.ClassName1')
def test(MockClass1, MockClass2):
    MockClass1.test.return_value = 'testing'

但是,在文档中我似乎找不到在使用patch.multiple时如何区分原始对象和mock。在

^{pr2}$

在上面的例子中,测试中的参数必须是foo和{}。有没有什么干净的方法可以让它们有更清晰的区别,例如mock_foo?在

在测试的一部分需要原始类或方法的情况下,这也很方便,避免了from module import Class as OriginalClass之类的导入

提前谢谢。在


Tags: 方法函数test名称参数foodef装饰
1条回答
网友
1楼 · 发布于 2024-09-30 05:19:54

不,还有。。。是的:

  • 不,因为如果你看一下^{} source code你会发现没有办法改变attribute_name
  • 是的,因为它们是作为关键字arg传递的,所以它们嵌入在关键字args字典中:所以您可以根据需要从字典中提取它们。在

遵循一个简单的例子来说明你如何做到这一点。。。我知道这也许不是你想要的,但这是唯一的方法。在

@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'

如果使用patch.multiple作为上下文管理器,这是获取模拟的唯一方法,因此这两种方法是一致的

^{pr2}$

相关问题 更多 >

    热门问题