【问题标题】:PyDev not capturing unittest.TextTestRunner output?PyDev 没有捕获 unittest.TextTestRunner 输出?
【发布时间】:2011-08-23 19:16:53
【问题描述】:

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 捕获测试运行器的输出吗?

【问题讨论】:

    标签: python pydev


    【解决方案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,它将运行在模块中找到的所有测试(或递归地在目录中),所以,这可能已经根据您的用例对您来说足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2020-10-18
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 2012-01-12
      相关资源
      最近更新 更多