unittest.mock:在特定的模拟对象上设置自定义属性(变量)

问题描述 投票:1回答:1

我正在尝试从另一个库的类中mock使用pytest进行单元测试。但是,其他库的属性(不是方法)大多是在运行时设置的。

我要实现的目标

  • [使用spec获得模拟对象的所有好处
  • 设置单元测试以进行模拟(就像在对象创建期间进行设置一样)所需的(嵌套)属性(不是方法)>
from unittest.mock import Mock
from otherlib import ClassName

def test_stuff():
    mock_object = Mock(spec=ClassName)
    mock_object.data.outward.key = 12345

    assert mock_object.data.outward.key == 12345  # AttributeError: Mock object has no attribute 'data'

我在代码更改中进行了这些尝试,但没有成功

...
def test_stuff():
    mock_object = Mock(spec=ClassName, **{'data.outward.key': 12345})

    assert mock_object.data.outward.key == 12345
...
def test_stuff():
    mock_object = Mock(spec=ClassName)
    attrs = {'data.outward.key': 12345}
    mock_object.configure_mock(**attrs)

    assert mock_object.data.outward.key == 12345

我正在尝试从另一个库的类中模拟现有对象,以使用pytest进行单元测试。但是,其他库的属性(不是方法)大多是在运行时设置的。我想要的是...

python unit-testing mocking python-unittest python-unittest.mock
1个回答
0
投票

我想出的最好的方法是在设置Mock object属性时使用另一个main mock object's。它有效,但是我想有一个更好的解决方案...?

© www.soinside.com 2019 - 2024. All rights reserved.