PyDev没有捕获unittest.TextTestRunner输出?

时间:2011-08-23 19:16:54

标签: python pydev

PyDev PyUnit透视图正确显示单元测试的输出,当我使用这个基本使用模式从他们所居住的模块中运行它们作为“Python单元测试”时:

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 个答案:

答案 0 :(得分:1)

PyDev不会运行你的__main__,它会收集这些类本身,因此,你需要在模块中加载你的类才能找到它们(并运行> Python Unittest,甚至直接使用Ctrl + F9快捷键 - 在这种情况下它不会显示类,但是在Ctrl + F9后直接按Enter键可以在最新的PyDev中运行模块中的所有测试。

例如:

import unittest 
from mypackage.mytests import *

如果您有多个并且TestCase类具有相同的名称,则需要执行以下操作:

import unittest
from mypackage.mytests import Test as Test1
from mypackage.mytests2 import Test as Test2
...

在这种情况下,您可能会更好地创建一个简单的帮助程序来从模块加载所有类,并将TestCase的子类放在当前模块中,并使用不同的名称(应该直截了当地通过dir / getattr执行此操作)模块)。

请注意,在PyDev中,您可以选择多个文件/文件夹并按>运行。 Python unittest,它将运行它在模块中找到的所有测试(或递归地在目录中),因此,根据您的使用情况,这可能已经足够了。