如何用嵌套属性mock编写干净的python mock代码

时间:2014-10-30 00:57:33

标签: python unit-testing

我有以下模拟代码:

mockSuper = mock.MagicMock()
type(mockSuper).role = mock.PropertyMock(
  return_value=mock.MagicMock())
type(mockSuper.role).role = mock.PropertyMock(return_value='Super')

我想要的是mockSuper.role.role = "my value"。但上面的代码看起来并不是那么简单。这是我第一次使用python mock,所以我认为应该有一些更好的代码版本。 :)

1 个答案:

答案 0 :(得分:0)

我刚刚这样做了:

>>> import unittest.mock
>>> m = unittest.mock.Mock()
>>> m.role.role = "some_value"
>>> m.role.role
'some_value'

但我想知道你是否真的想在字符串中添加一个字符串。也许只是先运行一些东西,然后在最后断言。

def test():
    mock = Mock()
    mock_role_role = function_returning_mock_role_role(mock)
    assert mock_role_role == mock.role.role

如果你还有一个选择,我建议不要测试demeter法则违规 - 例如,如果你先测试,那么。