【问题标题】:Enforce testing order in python's unittest test suite在 python 的 unittest 测试套件中强制执行测试顺序
【发布时间】:2017-09-29 20:14:42
【问题描述】:

我编写的代码可以找到可以在一个包中运行的所有测试,并将它们收集到一个单独的测试套件中。唯一的问题是,一些测试依赖于已经在运行的其他测试。

这可能看起来像是糟糕的测试架构,但我正在测试的是应用程序的启动和关闭。因此,我进行了确保一切正常运行的测试,然后进行了另一组测试,确保一切都得到了正确的清理。显然,在启动测试完成之前,我无法运行关闭测试。

是否可以在 Python 的单元测试中说“仅在以下情况下运行此测试,否则运行其他测试并返回给我”?

我知道我可以通过明确说运行启动测试,现在运行关闭测试来强制执行此顺序。但我正在使用测试发现,这样您就可以编写更多测试而无需显式调用它们,所以我试图避免这样做。

【问题讨论】:

  • 如果测试相互依赖,它们就不是单元测试。你想要的是一个集成测试。您可能应该编写自己的测试框架来执行此操作,而不是使用专门用于单元测试的unittest
  • 看看这个问题:stackoverflow.com/questions/3843171/… 这些案例似乎有需求和供应。
  • 是的,集成测试是测试应用程序的重要组成部分。 包像proboscis 这样让测试相互依赖,但这只是意味着只有在前一个测试通过时才会运行测试。一般来说,您不能(也不应该!)在单元测试之间传递状态。您应该为此使用集成测试框架。一种选择是编写一个作为集成测试的“单元测试”,与您的实际单元测试一起使用。
  • 除非我所说的 proboscis 实际上正是您正在寻找的内容,并且您没有在测试之间传递状态。在这种情况下,使用它!

标签: python unit-testing python-unittest


【解决方案1】:

unittest 模块要求每个测试能够独立运行:不依赖于之前或之后运行的其他测试。但是,您可以通过将setUp()tearDown() 方法添加到测试类来依赖其他代码在每个测试之前或之后运行。您还可以依赖其他代码在使用setUpClass(), setUpModule(), and their tear downs 测试之前或之后运行。

我认为 PyTest 固定装置具有更大的灵活性,但我没有经常使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多