增加Python中正在进行单元测试的类的日志详细性
我有一个Python类,它使用日志模块提供一些调试输出: 文件someclass.py:增加Python中正在进行单元测试的类的日志详细性,python,unit-testing,logging,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模块对这个类进行单元测试 文
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模块对这个类进行单元测试
文件测试\u 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 shell运行它时,它是有效的,但在PyDev中不起作用(它可能使用不同的测试运行程序)。从main()调用unittest.main()
我的输出显示:
DEBUG:root:I just did some stuff
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
unittests文档的基本示例显示了从main调用和运行单元测试的简单方法。如果您只想在失败时输出调试消息,那么使用test runner将是最简单的方法,因为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)
这是因为您将所有代码放在同一个模块中。我有两个模块,一个用于类,一个用于单元测试。main()在我的原始代码中,为了简洁起见,我删除了它。将代码拆分为两个模块不会显示调试消息。@Tudor hm,我已经用您提供的设置尝试了这种方法。它对我有用。你能再检查一下它是否适合你吗?谢谢。@alecxe你说得对,当调用python test\u someclass.py
时它确实起作用。我在Eclipse/PyDev中调用它,但它没有工作。它显然使用了另一个测试运行程序。您想在每次测试运行时都输出调试消息吗?或者,如果调试消息只在失败时显示,您还可以吗?如果它们只在失败时显示,那就更好了。听起来很酷,但我不能在Linux环境中安装任何东西(没有权限)。@Tudor据我所知,您只需使用print
,就可以在控制台上看到失败消息。@Tudor我的意思是,这里不需要nose
。只需在断言失败行之前放置一个print
,然后查看输出。适配器我的代码,尝试了它,但它不起作用。我看到您让某个类继承了TestCase。这不是上面的设置。我有一个抛出调试消息的类和一个单独的testcase类。如果被测试的类没有向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)
from unittest import TestCase
class SomeClass(TestCase):
def test_stuff(self):
print "I just did some stuff"
self.assertFalse(True)