Python 如果定义了构造函数,py.test将跳过测试类

Python 如果定义了构造函数,py.test将跳过测试类,python,pytest,Python,Pytest,我有以下通过py.test运行的unittest代码。 仅存在构造函数就可以使整个类在运行时跳过 py.test-v-s 已跳过收集的0个项目/1 有人能给我解释一下py.test的这种行为吗 我对理解py.test行为感兴趣,我知道不需要构造函数 谢谢, 兹德内克 py.test的文档说明py.test实现了以下标准测试发现: 集合从初始命令行参数开始,这些参数可能是目录、文件名或测试ID。 递归到目录中,除非它们与norecursedirs匹配 test*.py或*\u test.py文件

我有以下通过py.test运行的unittest代码。 仅存在构造函数就可以使整个类在运行时跳过 py.test-v-s

已跳过收集的0个项目/1

有人能给我解释一下py.test的这种行为吗

我对理解py.test行为感兴趣,我知道不需要构造函数

谢谢, 兹德内克


py.test的文档说明py.test实现了以下标准测试发现:

  • 集合从初始命令行参数开始,这些参数可能是目录、文件名或测试ID。 递归到目录中,除非它们与norecursedirs匹配
  • test*.py或*\u test.py文件,按其包名导入

  • Test
    前缀测试类(没有
    \uuuuu init\uuuu
    方法)[正如Matti Lyra py.test在回答中已经提到的那样,它故意跳过具有构造函数的类。原因是类在py.test中仅用于结构原因,没有任何固有的行为,而在实际编写代码时,没有
    则相反,而且更罕见
    类的方法。因此,在实践中,跳过带有构造函数的类很可能是需要的,通常只是一个名称冲突的类


    最后,py.test需要实例化类以执行测试。如果构造函数接受任何参数,则无法实例化它,因此再次跳过是正确的做法。

    对。我应该仔细阅读。非常感谢您发现它。链接已修复。是Python测试di约定的更新链接吗scovery,是指南的更新链接。两者都在2019年9月起作用。我同意,但我认为将来应该发出警告(一旦pytest增长了一点警告机制).Hi Holger,的确,那太好了。我只发现该类是通过从一个更大的测试套件中逐个模块运行来屏蔽的。一个明确的警告会立即告诉我们。除此之外,让我重复一下我在2010年在Europython上告诉过你的内容-感谢你提供了一个伟大的测试框架!IIRC如果你使用-rs调用py.test,你就已经知道了查看跳过的类的
    \uuuu init\uuuu()
    。如果确实希望在类中的其余测试之前初始化类中的某些内容,则可以使用pytest fixture。即
    @pytest.fixture(autouse=True)def\u设置(self):self.something=something
    pytest似乎终于发展出了这种警告机制!
    PytestCollectionWarning:无法收集测试类'TestClass',因为它有一个uu init_uu.构造函数(from:test/test_uclasses.py)
    。使用该警告进行搜索时,我发现了…:(我正在使用pytest 5.3.5)
    class TestClassName(object):
        def __init__(self):
           pass
    
        def setup_method(self, method):
           print "setup_method called"
    
        def teardown_method(self, method):
           print "teardown_method called"
    
        def test_a(self):
           print "test_a called"
           assert 1 == 1
    
        def test_b(self):
           print "test_b called"
           assert 1 == 1