0

我发现我经常在测试中一次又一次地使用相同的模式:

mock_get_data = mock.MagicMock()
mock_get_data.get_data.return_value = "mocked DB data"
mock_db = mock.Mock(spec=DBClass, return_value=mock_get_data)

它将用于测试(带有补丁)该类型的代码:

db_connector = DBClass(settings)
print db_connector.get_data()

有什么办法可以使“双重模拟”的东西更短吗?

4

2 回答 2

0

您应该能够通过将字典传递给构造函数来执行此操作,如文档的配置模拟部分所述,而不是在创建 MagicMock 后对其进行配置。

我相信以下将达到预期的结果:

mock_db = mock.Mock(spec=DBClass, return_value=mock.MagicMock(**{"get_data.return_value": "mocked DB data"})
于 2016-10-21T15:08:48.217 回答
0

你可以这样做:

mock_db = mock.Mock(spec=DBClass, return_value=mock.Mock(get_data=lambda:"mocked DB data"))
于 2016-10-21T14:49:31.507 回答