首页 > 解决方案 > @unittest.skip 在 Python <= 3.7 中不打印任何内容

问题描述

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

我们的代码是开源的,您可以在此处查看例如跳过的测试。

更新:我用 decorator 添加了 4 个测试@unittest.skip。当我使用 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 中,没有关于它们被跳过的输出。它是一个错误吗?

标签: pythondjangounit-testingpython-unittestdjango-unittest

解决方案


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

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


推荐阅读