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捕获测试运行器的输出?
答案 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,它将运行它在模块中找到的所有测试(或递归地在目录中),因此,根据您的使用情况,这可能已经足够了。