当前位置: 代码迷 >> python >> 我怎样才能让 pytest 忽略不继承 unittest 的 Test* 类?
  详细解决方案

我怎样才能让 pytest 忽略不继承 unittest 的 Test* 类?

热度:138   发布时间:2023-06-14 08:48:14.0

我正在尝试对通过传递的 testfixtures 进行测试,但它一直在尝试收集不是测试的东西:

======================================================= pytest-warning summary ========================================================
WC1 /Users/chris/vcs/git/testfixtures/testfixtures/tests/test_comparison.py cannot collect test class 'TestClassA' because it has a __init__ constructor
WC1 /Users/chris/vcs/git/testfixtures/testfixtures/tests/test_components.py cannot collect test class 'TestComponents' because it has a __init__ constructor
WC1 /Users/chris/vcs/git/testfixtures/testfixtures/tests/test_datetime.py cannot collect test class 'TestTZInfo' because it has a __new__ constructor
WC1 /Users/chris/vcs/git/testfixtures/testfixtures/tests/test_datetime.py cannot collect test class 'TestTZ2Info' because it has a __new__ constructor
cannot collect test class 'TestContainer' because it has a __init__ constructor
cannot collect test class 'TestTZInfo' because it has a __new__ constructor

如何让 pytest 只收集子类 unittest.TestCase 的 Test* 类?

我在 Pytest 发现了这一点:

在模块、类和函数上支持鼻子样式的__test__属性,包括单元测试样式的类。 如果设置为 False,则不会收集测试。

这可以帮助如果你的类收集,当你不希望它是,但它“因为它有一个无法收集测试类与不利于__init__构造函数”的警告。

您也可以使用以下标志运行 pytest:

-W ignore::pytest.PytestCollectionWarning

Pytest 使用 glob 样式的名称模式来收集测试,并且可以通过配置文件中的选项python_filespython_classespython_functions自定义发现。

我认为默认值是这样的:

[pytest]
python_files=test_*.py
python_classes=Test*
python_functions=test_*

也许您可以通过覆盖它来自定义它而不是收集类:

# pytest.ini (or in tox.ini, or in setup.cfg)
[pytest]  # if using setup.cfg, this section name should instead be [tool:pytest]
python_classes=NoThanks

注意:这里不限于一种模式,您可以指定它们的列表。

无论此选项如何,仍应收集继承unittest.TestCase 这是因为 unittest 框架本身用于收集这些测试。

  相关解决方案