【问题标题】:Python unittest - invoke unittest.main() with a custom TestSuitePython unittest - 使用自定义 TestSuite 调用 unittest.main()
【发布时间】:2010-09-22 17:40:49
【问题描述】:

我正在使用 python 进行单元测试。我没有使用任何自动测试发现。我正在手动将TestCases 组装成TestSuite

我可以用unittest.TextTestRunner().run(suite) 运行这些测试,我想用unittest.main() 运行它们,这样我就可以使用命令行选项(如-v/--failfast)。文档说unittest.main() 可以采用 TestRunner 选项。

如何将我的TestSuite 转换为TestRunner

【问题讨论】:

  • TestSuite 和 TestRunner 没有任何关系。套件是测试的集合。跑步者执行一组测试。你不会把一个变成另一个。您将套件提供给跑步者(通常通过unittest.main()。)
  • 如何为 unittest.main() 提供测试套件?或者我如何制作一个运行给定 TestSuite 的 TestRunner(我可以传递给 unittest.main())
  • 您是否只是想将failfast 传递给您的TestRunner?如果您阅读源代码,testrunner 的一个未记录的功能是它接受 failfast 参数。

标签: python unit-testing testing


【解决方案1】:

How to run a testsuite with unittest.main 几乎重复(回答复制粘贴):

您不能将 TestSuite 传递给 main,请查看 unittest.main.TestProgram 的构造函数(实际上是 unittest.main)以及此类的工作原理。如果有的话,第一个参数是模块名称,而不是测试套件。

main() 实际上从sys.argv 获取它的参数,因为它实际上是打算从命令行使用而不是从程序中使用。为了方便起见,这样做很常见。

【讨论】:

    【解决方案2】:

    除了确保你的单元测试模块中有这个之外什么都不做。

    if __name__ == '__main__':
        unittest.main(failfast=True)
    

    http://docs.python.org/library/unittest.html#unittest.main

    来自文档...

    unittest.main( failfast=True, testRunner=unittest.TextTestRunner )
    

    【讨论】:

    • 我没有使用 unittest.main() 的测试自动发现,我正在手工制作一个 TestSuite。如果我按照您的建议使用 unittest.main ,它将不会运行我的测试。我试过了。
    • 为什么要手工制作?为什么 main 不会自动发现您的测试?你的测试超类是什么?你的测试名称是什么?它非常适合我。你做错了什么?
    • 我没有使用自动发现,因为我正在根据函数的已知有效输入制作测试用例。我正在使用这种方法stackoverflow.com/questions/2798956/…
    • @Rory:这种方法看起来很愚蠢。为什么不把循环放在应该在的runTest 中呢?当您可以将复杂性转移到一个简单地遍历值的测试用例中时,为什么还要创建一个复杂的套件?
    • @S.Lott 看看我在那个答案中列出的好处。
    猜你喜欢
    • 2014-01-26
    • 2014-02-01
    • 2018-10-19
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多