【问题标题】:py.test doesn't collect tests that are not inherited from 'object'py.test 不收集不是从“对象”继承的测试
【发布时间】:2012-12-18 18:52:38
【问题描述】:

我正在尝试使用我的测试所需的不同设置创建 Base 类。我希望我的所有测试都继承自这个 Base 类。作为跑步者,我使用py.test

但是当我尝试这样做时,py.test 不会收集从 Base 类继承的这些测试,因此它不会运行它们。在文档中没有找到任何有用的信息。

也许有人以前遇到过这样的问题?有什么想法吗?

谢谢。

附:当测试从 object 继承时,一切正常。 Py.test 看到它们并正确运行。

代码示例:

我的基类:

class BaseClass(object):
"""BaseClass"""
def __init__(self):
    super(BaseClass, self).__init__()
    self.bla = 'bla'

我的测试课:

import pytest
from base_class import BaseClass

class TestSmth(BaseClass):
    def test_test(self):
        test_instatnce = TestSmth()
        print test_instatnce.bla

if __name__ == '__main__':
    pytest.main([__file__, '-v'])

输出:

============================= test session starts ==============================
platform darwin -- Python 2.7.2 -- pytest-2.3.3 -- /usr/bin/python
collecting ... collected 0 items

===============================  in 0.01 seconds ===============================
[Finished in 0.4s]  

【问题讨论】:

    标签: python oop inheritance pytest


    【解决方案1】:

    我认为你不能使用__init__。如果您要设置(或初始化)您可以执行的类:

    # base_class.py
    
    class BaseClass(object):
    """BaseClass"""
    
        @classmethod
        @pytest.fixture(scope = "class", autouse = True)
        def setup(self):
            self.bla = 'bla'
    
    #test_class.py
    
    import pytest
    from base_class import BaseClass
    
    class TestSmth(BaseClass):
        def test_test(self):
            print self.bla
    
    if __name__ == '__main__':
        pytest.main([__file__, '-v'])
    

    还可以初始化TestSmth 类,您可以创建另一个“方法”并用@pytest.fixture 装饰它。但是,您必须记住,那些“初始化方法”是按字母顺序调用的

    【讨论】:

    • 亚历克斯,谢谢!这正是我所需要的!
    • fixture 函数是按作用域排序的,所以所有类作用域的fixture 将在函数作用域之前执行。在每个范围内,没有定义顺序,可能是按字母顺序排列的,但那是偶然的。
    • @hpk42,它在一个类中按字母顺序排列。 :) 你可以自己试试:bitbucket.org/alex_okrushko/pytest-class-init-order/commits/…
    • 不要声称它不是按字母顺序排列的,请不要依赖它:)
    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2012-02-07
    相关资源
    最近更新 更多