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

时间:2014-01-29 12:17:17

标签: python pytest

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

收集0项/ 1跳过

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

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

谢谢, 兹德涅克

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

2 个答案:

答案 0 :(得分:35)

正如在Matti Lyra的回答中已经提到的那样py.test故意跳过具有构造函数的类。这样做的原因是类只是出于结构原因而在py.test中使用,并且没有任何固有的行为,而实际编写代码时,对于没有类.__init__()方法而言则相反且更为罕见。所以在实践中,使用构造函数跳过一个类可能就是所期望的,通常它只是一个恰好有一个冲突名称的类。

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

答案 1 :(得分:32)

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

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

所以不是不需要构造函数,py.test只是忽略拥有构造函数的类。还有guide用于更改标准测试发现。