增加Python中正在进行单元测试的类的日志详细性

增加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模块对这个类进行单元测试 文

我有一个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模块对这个类进行单元测试

文件测试\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)