2014-10-20 10 views
5

में पाश के लिए क्या कोई तरीका है कि पाइथन एक विधि में सभी दावे को निष्पादित करने के लिए कहें और पहले विफल होने पर रोकने के बजाय सभी मामलों को विफल कर दें।unittest

class MyTestCase(TestCase): 
    def test_a(self): 
     with open('testcase.txt') as ifile: 
      for iline in ifile: 
       self.assertEqual(iline, 'it is a test!') 
+1

मुझे अभी तक एक यूनिट टेस्ट फ्रेमवर्क देखना है जो त्रुटियों को जमा करता है और उन सभी को रिपोर्ट करता है। ऐसा लगता है कि मानक पहली विफलता पर असफल होना है। – TGH

+1

@ टीजीएच: मेरे पास है; [googletest] (https://code.google.com/p/googletest/wiki/Primer) में 'EXPECT' मैक्रोज़ है जो विफलता और' एएसएसईआरटी 'मैक्रोज़ पर जारी रहता है जो तुरंत निरस्त हो जाते हैं। – user2357112

+0

@ user2357112 ठीक है दिलचस्प। मुझे लगता है कि यह समझ में आता है क्योंकि यह ढांचे के निर्माता द्वारा बनाई गई एक डिजाइन पसंद है। मुझे लगता है कि एक आम पैटर्न असफल होने पर अपवादों को फेंकना है, जिससे कॉलर को वांछित होने पर अपवादों के अपने स्वयं के तालमेल को लागू करने के लिए छोड़ दिया जाता है। – TGH

उत्तर

7

पायथन 3.4 ने subTest संदर्भ प्रबंधक की शुरुआत की। आपका कोड दिखेगा

class MyTestCase(TestCase): 
    def test_a(self): 
     with open('testcase.txt') as ifile: 
      for iline in ifile: 
       with self.subTest(line=iline): 
        self.assertEqual(iline, 'it is a test!') 

subTest बिना इस लक्ष्य को हासिल करने के लिए बदसूरत तरह से, एक try ब्लॉक के भीतर self.assert* कॉल कर त्रुटियों पकड़ा प्रिंट, और अगर कम से कम एक परीक्षण विफल स्पष्ट रूप से पाश के बाद AssertionError बढ़ाने के लिए है की तरह।

+0

मुझे लगता है कि मुझे अजगर 2.7 ... – lucemia

+1

@lucemia subTest आपके इच्छित चीज़ों को प्राप्त करने का सबसे आसान तरीका है, लेकिन आप अपवाद मुद्रित करने के लिए लूप में 'try..except' का भी उपयोग कर सकते हैं। – vaultah

+0

subtests के साथ समस्या यह है कि प्रत्येक सेटटेस्ट के लिए 'setUp' स्वचालित रूप से नहीं कहा जाता है, जैसा कभी-कभी आवश्यक हो सकता है। हालांकि इसे निश्चित रूप से subtest के भीतर 'self.setUp() 'के रूप में मैन्युअल रूप से कहा जा सकता है। –

1

आम तौर पर नहीं। पहली बार यूनिट परीक्षण बंद हो जाता है। यदि आप उन सभी लाइनों की तुलना करना चाहते हैं जिन्हें आपको स्थानीय सूची की आवश्यकता है और फिर अलग-अलग पंक्तियों को सूची में डाल दें। फिर जोर दें कि सूची की लंबाई शून्य है। या एक स्थानीय बूलियन चर।

3

वैकल्पिक रूप से, आप ddt package की मदद से एक डेटा के आधार पर परीक्षण बना सकते हैं:

डीडीटी (डेटा संचालित टेस्ट) आप के बाद एक परीक्षण का मामला गुणा करने के लिए विभिन्न परीक्षण के साथ इसे चलाने की अनुमति देता है डेटा, और इसे कई परीक्षण मामलों के रूप में प्रदर्शित करते हैं।

import unittest 
from ddt import ddt, data 

@ddt 
class FooTestCase(unittest.TestCase): 
    @data('it is a test!', 'it is a test!', 'something else') 
    def test_lines(self, value): 
     self.assertEqual(value, 'it is a test!') 

ddt भी data coming from a file हो सकता है, लेकिन यह एक JSON फ़ाइल हो गया है।

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