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

最后发布: 2014-01-29 12:17:16


问题

我有以下通过py.test运行的单元测试代码。 构造函数的存在使运行py.test -v -s时跳过整个类

收集了0件物品/ 1条被跳过

有人可以向我解释py.test的这种行为吗?

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

谢谢Zdenek

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
python pytest
回答

正如Matti Lyra的答案中已经提到的,py.test故意跳过具有构造函数的类。 这样做的原因是,类仅出于py.test中的结构原因而使用,并且没有任何固有的行为,而在实际编写代码时,对类不使用.__init__()方法是相反的,而且很少见。 因此在实践中,跳过带有构造函数的类可能是所希望的,通常只是碰巧名称冲突的类。

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


回答

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

  • 收集从初始命令行参数开始,该参数可以是目录,文件名或测试ID。 递归到目录,除非它们匹配norecursedirs
  • test _ *。py或* _test.py文件,由文件包名称导入。
  • Test前缀的测试类(没有__init__方法)[ <-在此注意这一点 ]
  • test_前缀的测试函数或方法是测试项目

因此,并不是不需要构造函数,py.test只会忽略具有构造函数的类。 也有用于更改标准测试发现的指南