python mock_open断言几次写调用

时间:2015-01-14 23:05:41

标签: python unit-testing python-2.7 mocking

我正在尝试测试一些执行日志记录的代码。

logfile = open(file_name, 'w')
logfile.write("blah1")
logfile.write("blah2")

我想断言blah1和blah2都写完了。我的测试函数如下所示:

def test_it(self):
    logger.open = mock_open()
    logger.time.time = Mock(return_value=12345)

    logger.run_me()

    logger.open.assert_called_once_with('test_12345.log', 'w');
    file_handle_mock = logger.open()
    file_handle_mock.write.assert_called_with("blah1")
    file_handle_mock.write.assert_called_with("blah2")

但它给了我一个错误:

AssertionError: Expected call: write('blah1')
Actual call: write('blah2')

如何正确测试对write函数的多次调用?

版本: Python 2.7.6 模拟== 1.0.1

1 个答案:

答案 0 :(得分:2)

根据文档,如果调用是最近的 1 assert_called_withassert_called_once_with只会通过。我们可以使用assert_any_callassert_has_calls

file_handle_mock.write.assert_has_calls([
    mock.call('blah1'),
    mock.call('blah2'),
])

1 它有点隐藏在assert_any_call的文档中,所以我们不能责怪你错过它......