我正在尝试使用pytest进行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 *类?
答案 0 :(得分:4)
我在Pytest 2.6 release notes中找到了这个:
支持模块,类和函数的nose-style
__test__
属性,包括unittest-style Classes。如果设置为False,则不会收集测试。
如果您的课程 在您不想要的时候收集,这可能有所帮助,但它无法帮助收集测试课程,因为它无法收集测试课程,因为它有一个__init__
构造函数"警告。
答案 1 :(得分:2)
您还可以使用以下标志运行pytest:
-W ignore::pytest.PytestCollectionWarning
答案 2 :(得分:0)
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框架本身用于收集这些测试。