2012-02-24 4 views
6

में यूनिट परीक्षणों को पैरामीटरेट करें मैं पाइथन यूनिट परीक्षणों के एक सेट पर काम करता हूं जो वर्तमान में परीक्षण ढांचे में बने पायथन का उपयोग करके बनाए जाते हैं। मैं पैरामीटरलाइज्ड परीक्षण लिखना चाहता हूं जो डेटा के सेट के आधार पर कई बार निष्पादित करेगा।पाइथन

यानी। यदि मेरा डेटा सेट [1,2,3,4] है तो मेरा टेस्ट फ़ंक्शन मेरे डेटा सेट में इनपुट का उपयोग करके चार बार चलाएगा।

def test(data): 
    if data > 0: 
     #Pass the test 

मेरी समझ से यह संभव नहीं वर्तमान ढांचे में बनाया गया है, जब तक मैं अपने परीक्षण समारोह में एक पाश डाल है। मैं ऐसा नहीं करना चाहता क्योंकि मुझे एक इनपुट विफल होने पर भी निष्पादन जारी रखने के लिए परीक्षण की आवश्यकता है।

मैंने देखा है कि नाक, या पायस्ट का उपयोग करना संभव है। उपयोग करने के लिए सबसे अच्छा ढांचा कौन सा है? क्या कोई और ढांचा है जिसका मैं उपयोग कर सकता हूं जो इनमें से किसी से भी बेहतर होगा?

अग्रिम धन्यवाद!

उत्तर

6

ध्यान दें कि यह funcargs के हालिया जोड़े के py.test में हाल ही में किए गए सबसे आम उपयोगों में से एक है।

आपके मामले में आप प्राप्त करेंगे:

def pytest_generate_tests(metafunc): 
    if 'data' in metafunc.funcargnames: 
     metafunc.parametrize('data', [1,2,3,4]) 

def test_data(data): 
    assert data > 0 

[संपादित करें] मैं शायद जोड़ना चाहिए कि आप भी है कि के रूप में बस

@pytest.mark.parametrize('data', [1,2,3,4]) 
def test_data(data): 
    assert data > 0 

के रूप में तो मैं कहेंगे ऐसा कर सकते हैं py .test पैरामीटरयुक्त इकाई परीक्षण के लिए एक महान ढांचा है ...

1

आप गतिशील रूप से अपने डेटा निम्नलिखित तरीके से सेट के आधार पर परीक्षण बना सकते हैं:

import unittest 

data_set = [1,2,3,4] 

class TestFunctions(unittest.TestCase): 
    pass # all your non-dynamic tests here as normal 

for i in data_set: 
    test_name = "test_number_%s" % i # a valid unittest test name starting with "test_" 
    def dynamic_test(self, i=i): 
     self.assertTrue(i % 2) 
    setattr(TestFunctions, test_name, dynamic_test) 

if __name__ == '__main__': 
    unittest.main() 

सवाल Python unittest: Generate multiple tests programmatically? इस के अधिक चर्चा, another approach जो गतिशील परीक्षण के कई उदाहरण बनाने के द्वारा एक ही बात को प्राप्त होता है सहित एक परीक्षण सूट में मामला।