如何阻止python Unitest打印测试docstring



我注意到,当我的python单元测试包含功能顶部的文档时,有时框架将它们在测试输出中打印出来。通常,测试输出包含每行测试:

<test name> ... ok 

如果测试具有表格的docstring

"""
test that so and so happens
"""

都很好。但是,如果测试在一行上都有一个docstring:

"""test that so and so happens"""

然后,测试输出需要多个行,并包括这样的文档:

<test name>
test that so and so happens ... ok

我找不到记录在哪里的行为。有没有办法将其关闭?

使用docstring的第一个行;负责的方法是TestCase.shortDescription(),您可以在测试柜中覆盖:

class MyTests(unittest.TestCase):
    #  ....
    def shortDescription(self):
        return None

通过始终返回None,您可以完全关闭该功能。如果要以不同的方式格式化docstring,则可以作为self._testMethodDoc

这是martijnpieters的改进版本。


而不是为每个测试覆盖该方法,而是将以下文件添加到您的测试列表中更方便(至少对我而言)。命名文件test_[whatever you want].py

test_config.py

import unittest
# Hides Docstring from Verbosis mode
unittest.TestCase.shortDescription = lambda x: None

此代码段也可以放置在test文件夹的__init__.py文件中。

就我而言,我只是添加到项目scripts的根文件夹中,因为我使用scripts中的python -m unittest中的Discover来运行项目的所有UnitTests。由于这是该目录级别上唯一的test*.py文件,因此它将在任何其他测试之前加载。

(我在根文件夹的__init__.py上尝试了片段,它似乎不起作用,所以我坚持使用文件方法)

btw:我实际上更喜欢lambda x: "t"而不是lambda x: None

阅读本文后,我为避免样板制作了一个插件。

https://github.com/marechj/nosenodocstrings

最新更新