Python:使用 nose/unittest 中的日志信息?
Python: Using logging info in nose/unittest?
我有一个操作对象内部状态的测试函数。该对象使用 logging.info()
.
记录以下内容
INFO:root:_change: test light red
INFO:root:_change: test light green
INFO:root:_change: test light yellow
如何将其合并到 nose 或 unittest 函数中,以便进行与此类似的测试?
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
在测试我的日志记录时,我通常做的是模拟我的记录器并确保使用适当的参数调用它。我通常会这样做:
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")
我还想补充一点,说到这种测试,我喜欢使用像 flexmock and mock
这样的测试框架
此外,在验证匹配器方面,py-hamcrest 很棒。
我有一个操作对象内部状态的测试函数。该对象使用 logging.info()
.
INFO:root:_change: test light red
INFO:root:_change: test light green
INFO:root:_change: test light yellow
如何将其合并到 nose 或 unittest 函数中,以便进行与此类似的测试?
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
在测试我的日志记录时,我通常做的是模拟我的记录器并确保使用适当的参数调用它。我通常会这样做:
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")
我还想补充一点,说到这种测试,我喜欢使用像 flexmock and mock
这样的测试框架此外,在验证匹配器方面,py-hamcrest 很棒。