我有一个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中运行它(它可能使用不同的测试运行器)。
答案 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)