2012-12-18 25 views
6

Sto provando a creare la classe Base con diverse impostazioni necessarie per i miei test. Voglio che tutti i miei test siano ereditati da questa classe Base. Come corridore io uso py.test.py.test non raccoglie test non ereditati da "oggetto"

Ma quando sto cercando di farlo, py.test non raccoglie questi test ereditati dalla classe Base e di conseguenza non li esegue. Non ho trovato alcuna informazione utile nella documentazione.

Forse qualcuno ha dovuto affrontare tali problemi prima? Qualche idea?

Grazie.

P.S. Quando i test vengono ereditati dall'oggetto , tutto funziona correttamente. Py.test li vedi ed eseguono correttamente.

Esempio di codice:

La mia classe di base:

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

La mia classe di prova:

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']) 

uscita:

============================= 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] 

risposta

5

io non credo che si può utilizzare __init__. Se si cosa setup (o inizializzare) la Classe si può fare:

# 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']) 

anche per inizializzare la classe TestSmth è possibile creare un altro "metodo" e decorare con @pytest.fixture pure. TUTTAVIA, è necessario ricordare che i "metodi di inizializzazione" sono chiamati in ordine alfabetico.

+0

Alex, Grazie! Questo è esattamente ciò di cui ho bisogno! –

+0

Le funzioni di fixture sono ordinate per scope, quindi tutte le fixate con classe verranno eseguite prima di quelle con scope funzionale. All'interno di ogni ambito l'ordine non è definito, potrebbe essere alfabetico ma sarebbe co-incidentale. – hpk42

+0

@ hpk42, È in ordine alfabetico all'interno di una classe. :) Puoi provarlo tu stesso: https://bitbucket.org/alex_okrushko/pytest-class-init-order/commits/e3f316d6597c57e22a82362643197140 –

Problemi correlati