【问题标题】:@unittest.skip doesn't print anything in Python <= 3.7@unittest.skip 在 Python <= 3.7 中不打印任何内容
【发布时间】:2021-02-11 19:19:18
【问题描述】:

我们正在使用带有unittest 的Django。 @unittest.skip 装饰器会跳过一些测试。但是,如果我使用 Python 3.6 或 3.7 运行测试,我会通过一些测试 (Ran 993 tests / OK),如果我使用 Python 3.8 运行相同的测试,我会得到相同数量的测试但跳过了一些测试 (@ 987654325@)。我想知道 Python 3.6 和 3.7 是否也跳过了相同的测试,还是仅使用 Python 3.8?为什么我只能使用 Python 3.8 获得跳过的输出?数字 993 是否包括跳过的测试?其中一个输出不正确吗?因为不同版本的 Python 的输出不同是没有意义的,我不明白这种差异的原因。我没有在文档中找到它。

我们的代码是开源的,您可以看到例如跳过的测试here

更新:我用装饰器 @unittest.skip 添加了另外 4 个测试。当我使用 Python 3.8 运行所有测试时,我会得到以下输出:Ran 997 tests / OK (skipped=8)(每个跳过的测试都有一个s,就像以前一样)。但是,如果我使用 Python 3.6 或 3.7 运行测试,我会得到以下输出:Ran 997 tests / OK,并且输出中没有 s,就像以前一样(我得到 997 个点)。虽然我比以前多了 4 次测试。

我添加的测试会引发异常,因此如果不跳过它们就会失败。

我认为跳过的测试在所有 Python 版本中都被跳过,但在 Python 3.6 和 3.7 中,没有关于它们被跳过的输出。是bug吗?

【问题讨论】:

  • 这似乎很容易测试。只需添加一个新的跳过测试,看看“Ran 993 测试”是否在 3.7 上变为“Ran 994 测试”
  • @AdamSmith 我会检查并告诉你。这可能需要一些时间,因为测试速度很慢。
  • @MrBeanBremen 请查看我的更新。你能解释一下吗?
  • @MrBeanBremen 数字 993 是测试的总数,包括跳过的测试。

标签: python django unit-testing python-unittest django-unittest


【解决方案1】:

是的,这是一个错误,但在您的代码中。您使用的是@unittest.skip 而不是@unittest.skip(reason)。弄清楚 skip() 的实现是否以及如何在 3.7 和 3.8 之间发生变化以导致行为发生变化,或者它是否完全不同,留作练习。

skip() 使用正确时,您会打印出ss,并且使用Python 3.7 报告跳过的测试。

【讨论】:

  • 谢谢!我不知道reason 是必需的,没有它就不会跳过测试。
猜你喜欢
  • 1970-01-01
  • 2019-05-26
  • 2021-02-13
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多