【问题标题】:How to stop Python unittest from printing test docstring?如何阻止 Python unittest 打印测试文档字符串?
【发布时间】:2021-10-01 00:47:10
【问题描述】:

我注意到,当我的 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

我找不到记录在案的行为的位置。有没有办法关闭它?

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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


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

      test_config.py

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

      这个代码sn-p也可以放在test文件夹的__init__.py文件中。

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

      (我在根文件夹的__init__.py上尝试了sn-p,好像不行,所以我坚持使用文件的方式)

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

      【讨论】:

        【解决方案3】:

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

        https://github.com/MarechJ/nosenodocstrings

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-25
          • 1970-01-01
          • 2018-03-16
          • 1970-01-01
          • 2016-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多