@unittest.skip 在 Python <= 3.7 中不打印任何内容

@unittest.skip doesn't print anything in Python <= 3.7

我们在 unittest 中使用 Django。使用 @unittest.skip 装饰器会跳过一些测试。但是,如果我 运行 使用 Python 3.6 或 3.7 进行测试,我会通过一些测试(Ran 993 tests / OK),如果我 运行 使用 [=34] 进行相同的测试=] 3.8,我得到了相同数量的测试,但跳过了一些测试 (Ran 993 tests / OK (skipped=4))。我想知道 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 中没有关于它们被跳过的输出。这是一个错误吗?

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

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