增加在Python中进行单元测试的类的日志记录详细程度

时间:2014-06-04 13:20:28

标签: python unit-testing logging

我有一个Python类,它使用日志记录模块提供一些调试输出:

提交someclass.py:

import logging

class SomeClass:

    def do_stuff(self):
        # do some things
        logging.debug("I just did some stuff")
        # do some more stuff
        return True

我使用unittest模块对这个类进行单元测试

文件test_someclass.py

import unittest
from someclass import SomeClass

class SomeClassTests(unittest.TestCase):

    def test_do_stuff(self):
        obj = SomeClass()
        self.assertFalse(obj.do_stuff())

def main():
    unittest.main()

if __name__ == '__main__':
    main()

我想要做的是在运行单元测试时显示调试消息。我试图从单元测试模块中设置详细程度来调试:

import logging

# ....

def main():
    unittest.main()
    logging.basicConfig(level=logging.DEBUG)

这没有用。实现这个目标的方法是什么?更好的是只为一次测试启用DEBUG详细程度。

更新:

显然它在从Python shell运行时有效,但在PyDev中运行它(它可能使用不同的测试运行器)。

2 个答案:

答案 0 :(得分:1)

unittest.main()致电main()

def main():
    logging.basicConfig(level=logging.DEBUG)
    unittest.main()

我的输出显示:

DEBUG:root:I just did some stuff
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

关于单元测试文档的基本示例:https://docs.python.org/2/library/unittest.html显示了从main调用和运行单元测试的简单方法。

答案 1 :(得分:1)

如果您只想在失败时输出调试消息,那么使用nose测试运行器将是nose captures stdout以来最简单的方法,并在失败时将其打印出来。它开箱即用:

$ nosetests test.py
F
======================================================================
FAIL: test_stuff (test.SomeClass)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/../../test.py", line 7, in test_stuff
    self.assertFalse(True)
AssertionError: True is not false
-------------------- >> begin captured stdout << ---------------------
I just did some stuff

--------------------- >> end captured stdout << ----------------------

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)

test.py包含:

from unittest import TestCase

class SomeClass(TestCase):
    def test_stuff(self):
        print "I just did some stuff"
        self.assertFalse(True)