PyDev未捕获unittest.TextTestRunner输出?
当我从包含单元测试的模块中以“Python unit-test”的方式运行测试时,PyDev的PyUnit视图能够正确显示我的测试结果,使用的基本方式如下:
import unittest
class MyTest(unittest.TestCase):
def test_something(self):
pass
if __name__ == '__main__':
unittest.main()
但是,当我像这样从另一个模块导入测试时……
import unittest
import mypackage.mytests
if __name__ == '__main__':
unittest.main(module=mypackage.mytests)
……就没有测试被运行。当我以“Python Run”方式运行同一个模块,或者从终端运行时,它的表现是正常的,所以不知道为什么PyUnit视图没有正确加载测试。我用另一种方法也得到了同样的结果:
import unittest
import mypackage.mytests
tests = unittest.TestLoader().loadTestsFromModule(mypackage.mytests)
unittest.TextTestRunner().run(tests)
有没有其他方法可以导入包含TestCase派生类的模块,并让PyDev捕捉测试运行器的输出呢?
1 个回答
1
PyDev不会直接运行你的__main__
,它会自己收集类,所以你需要确保你的类已经加载到模块中,这样它才能找到它们(然后选择“运行为 > Python Unittest”,或者直接使用Ctrl+F9快捷键 -- 在这种情况下,它不会显示类,但在按下Ctrl+F9后直接按Enter应该可以运行模块中的所有测试,在最新的PyDev中是这样)。
比如:
import unittest
from mypackage.mytests import *
如果你有多个测试类,而且这些类的名字是一样的,你就需要做一些类似这样的事情:
import unittest
from mypackage.mytests import Test as Test1
from mypackage.mytests2 import Test as Test2
...
在这种情况下,你可能更好地创建一个简单的助手,来加载模块中的所有类,并把TestCase的子类放在当前模块中,使用不同的名字(通过模块中的dir/getattr来做到这一点应该很简单)。
不过,要注意的是,在PyDev中,你可以选择多个文件或文件夹,然后选择“运行为 > Python unittest”,它会运行模块中找到的所有测试(或者在一个目录中递归查找),所以根据你的使用情况,这可能已经足够了。