2012-12-18 15 views
6

मैं अपने परीक्षणों के लिए आवश्यक विभिन्न सेटअप के साथ बेस कक्षा बनाने की कोशिश कर रहा हूं। मैं चाहता हूं कि मेरे सभी परीक्षण इस बेस कक्षा से विरासत में प्राप्त हों। धावक के रूप में मैं py.test का उपयोग करता हूं।py.test उन परीक्षणों को एकत्र नहीं करता है जो 'ऑब्जेक्ट' से विरासत में नहीं हैं

लेकिन जब मैं ऐसा करने की कोशिश कर रहा हूं, py.test बेस कक्षा से विरासत में प्राप्त इन परीक्षणों को एकत्र नहीं करता है, और नतीजतन यह उन्हें नहीं चलाता है। दस्तावेज़ीकरण में कोई उपयोगी जानकारी नहीं मिली।

शायद किसी को पहले ऐसे मुद्दों का सामना करना पड़ा? कोई विचार?

धन्यवाद।

पीएस जब परीक्षण ऑब्जेक्ट से विरासत में प्राप्त होते हैं तो सब कुछ ठीक काम करता है। 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

एलेक्स, धन्यवाद! यही वही है जो मुझे चाहिए! –

+0

फ़िक्स्चर फ़ंक्शंस को स्कोप द्वारा क्रमबद्ध किया जाता है, इसलिए सभी क्लास-स्कोप्ड फ़िक्स्चर फ़ंक्शन-स्कोप्ड वाले से पहले निष्पादित होंगे। प्रत्येक दायरे में आदेश परिभाषित नहीं किया गया है, वर्णमाला हो सकता है लेकिन यह सह-आकस्मिक होगा। – hpk42

+0

@ एचपीके 42, यह एक कक्षा के भीतर वर्णमाला में है। :) आप इसे अपने लिए आजमा सकते हैं: https://bitbucket.org/alex_okrushko/pytest-class-init-order/commits/e3f316d6597c57e22a82362643197140 –

संबंधित मुद्दे

 संबंधित मुद्दे