如何让pytest忽略不是unittest子类的Test *类?

时间:2017-02-16 08:20:15

标签: python pytest

我正在尝试使用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 *类?

3 个答案:

答案 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_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框架本身用于收集这些测试。