【问题标题】:Is there an alternative result for Python unit tests, other than a Pass or Fail?除了通过或失败之外,Python 单元测试是否有替代结果?
【发布时间】:2016-08-30 13:33:15
【问题描述】:

我正在编写具有数据库依赖性的单元测试(所以从技术上讲,它们是功能测试)。通常,这些测试不仅依赖于数据库的实时性和功能性,而且还依赖于某些可用的数据。

例如,在一项测试中,我可能会查询数据库以检索将用于测试更新或删除功能的示例数据。如果数据不存在,那么在这种情况下,这并不完全是失败。我只关心更新或删除的通过/失败状态,在这种情况下,我们甚至还没有走得足够远来测试它。所以我不想给出假阳性或假阴性。

是否有一种优雅的方式让单元测试返回第三种可能的结果?比如警告?

【问题讨论】:

  • Pytest 有 skip 和 xfail doc.pytest.org/en/latest/skipping.html
  • 这是一个失败——您的测试未能按照您的测试所需的方式设置系统。说“数据不存在,所以这个测试失败也没关系”是说你并不真正关心你正在测试的功能是否有效。让您的测试在检索数据之前立即可靠地插入数据,这将使您更好地了解系统的状态。
  • 如果它们是单元测试,你真的应该考虑模拟 SQL 层,以便你的测试只测试特定的代码段(没有像这样的依赖项)。拥有这些依赖项会减慢您的测试执行时间。
  • @Mark,你对嘲笑是正确的。但在这种特殊情况下,这些实际上是旨在命中数据库的功能测试。

标签: python unit-testing functional-testing


【解决方案1】:

总的来说,我认为Paul Becotte 的建议最适合大多数情况:

虽然这是一个失败 - 您的测试未能在 您的测试所需的方式。说“数据不存在,所以它 可以让这个测试失败”是说你真的不在乎 关于您正在测试的功能是否有效。做你的测试 在检索数据之前立即可靠地插入数据,这将 让您更好地了解系统状态。

但是,在我的特定情况下,我正在编写一个功能测试,该测试依赖于从多个进程生成和操作的数据。在测试开始时快速生成它是不切实际的(至少目前如此)。

我最终发现我需要它来使用这里提到的skipTest:

Skip unittest if some-condition in SetUpClass fails

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2012-09-19
    • 1970-01-01
    • 2017-08-15
    • 2010-11-19
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多