提高Python单元测试中类的日志详细性
我有一个用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)
但是这样并没有成功。那有什么办法可以做到这一点呢?如果能只为一个测试启用调试详细程度就更好了。
更新:
显然在Python命令行中运行是可以的,但在PyDev中就不行了(可能是因为它使用了不同的测试运行器)。
2 个回答
1
在你的 main()
函数里调用 unittest.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,展示了从主函数调用和运行单元测试的简单方法。
1
如果你只想在出错的时候输出调试信息,使用nose
这个测试工具是最简单的选择,因为nose
会自动捕捉标准输出(也就是你在程序中打印的内容),并在出错时显示出来。这是开箱即用的功能:
$ 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)