Python:在nose / unittest中使用日志信息?

时间:2015-09-25 23:35:30

标签: python nose python-unittest nosetests

我有一个测试函数来操纵对象的内部状态。该对象使用logging.info()记录以下内容。

INFO:root:_change: test light red
INFO:root:_change: test light green
INFO:root:_change: test light yellow

如何将其合并到鼻子或单元测试功能中,以便我可以进行类似的测试?

def test_thing():
    expected_log_output = "INFO:root:_change: test light red\n" +\
                          "INFO:root:_change: test light green\n" +\
                          "INFO:root:_change: test light yellow\n"

    run_thing()
    assert actual_log_output matches expected_log_output

1 个答案:

答案 0 :(得分:1)

在测试我的日志记录时,我通常做的是模拟我的记录器并确保使用适当的参数调用它。我通常做这样的事情:

class TestBackupInstantiation(TestCase):
    @patch('core.backup.log')
    def test_exception_raised_when_instantiating_class(self, m_log):
        with self.assertRaises(IOError) as exc:
            Backup(AFakeFactory())
        assert_equal(m_log.error.call_count, 1)
        assert_that(exc.exception, is_(IOError))

因此,您甚至可以在可以进行测试的地方拨打电话,以确保调用记录器以验证消息。

我相信你可以这样做:

m_log.error.assert_called_with("foo")

我还可以补充一点,在进行此类测试时,我喜欢使用flexmockmock等测试框架

此外,在验证匹配器时,py-hamcrest非常棒。