17

我注意到,当我的 Python 单元测试在函数顶部包含文档时,有时框架会在测试输出中打印它们。通常,测试输出每行包含一个测试:

<test name> ... ok 

如果测试有一个形式的文档字符串

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

比一切都好。但是如果测试在一行上有一个文档字符串:

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

那么测试输出需要多于一行,并包括这样的文档:

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

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

4

3 回答 3

24

使用文档字符串的第一行;负责的方法是TestCase.shortDescription(),您可以在测试用例中覆盖它:

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

通过始终返回None,您可以完全关闭该功能。如果你想以不同的方式格式化文档字符串,它可以作为self._testMethodDoc.

于 2012-10-18T20:06:23.353 回答
2

这是 MartijnPieters 优秀答案的改进版本。


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

test_config.py

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

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

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

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

顺便说一句:我实际上更喜欢lambda x: "\t"而不是lambda x: None

于 2021-09-30T15:41:28.013 回答
0

读完这篇文章后,我为鼻子测试做了一个插件以避免样板。

https://github.com/MarechJ/nosenodocstrings

于 2015-08-12T19:33:20.327 回答