2012-12-18 67 views
6

我試圖創建基地我需要測試的不同設置。我希望我的所有測試都能繼承這個基地類。作爲跑步者,我使用py.testpy.test不會收集不是從「對象」繼承的測試

但是,當我試圖這樣做,py.test不會收集這些測試繼承自基地類,因此它不會運行它們。在文檔中找不到任何有用的信息。

也許有人遇到過這樣的問題嗎?有任何想法嗎?

謝謝。

P.S.當測試從繼承對象一切工作正常。 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] 

回答

5

我不認爲你可以使用__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裝飾它。但是,您必須記住那些「初始化方法」按字母順序調用。

+0

Alex, 謝謝!這正是我需要的! –

+0

燈具功能按照範圍排序,因此所有類範圍的燈具都將在功能範圍內執行。在每個範圍內,訂單沒有定義,可能是按字母順序排列的,但這是偶然的。 – hpk42

+0

@ hpk42,它在一個班級中按字母順序排列。 :)你可以自己嘗試一下:https://bitbucket.org/alex_okrushko/pytest-class-init-order/commits/e3f316d6597c57e22a82362643197140 –