问题描述
我正在尝试对通过传递的 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* 类?
1楼
我在 Pytest 发现了这一点:
在模块、类和函数上支持鼻子样式的
__test__
属性,包括单元测试样式的类。 如果设置为 False,则不会收集测试。
这可以帮助如果你的类被收集,当你不希望它是,但它“因为它有一个无法收集测试类与不利于__init__
构造函数”的警告。
2楼
您也可以使用以下标志运行 pytest:
-W ignore::pytest.PytestCollectionWarning
3楼
Pytest 使用 glob 样式的名称模式来收集测试,并且可以通过配置文件中的选项python_files
、 python_classes
和python_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 框架本身用于收集这些测试。