2010-11-22 20 views
14

मैं एक JUnit 4 परीक्षण है कि परीक्षण डाटा की एक सरणी के माध्यम से लूप है:सरणी के माध्यम से लूप, प्रत्येक तत्व एक JUnit परीक्षण

public @Test void testAll() { 

    final Object[][] sets = new Object[][] { 
      // SET        TYPE VALUE 

      // --- valid sets 

      // groups 
      x(s(A,1, B,1, C,1),     G), 
      x(s(A,4, B,4, D,4),     G), 
      x(s(A,8, B,8, D,8, C,8),   G), 
      x(s(J,J, B,4, D,4),     G, 4*3), 
      x(s(A,9, J,J, D,9),     G, 9*3), 
      x(s(A,2, B,2, C,2),     G), 
      x(s(A,4, B,4, J,J),     G, 4*3), 
      x(s(A,4, B,4, C,4, D,4),   G), 

      // runs 
      x(s(A,1, A,2, A,3),     R), 
      x(s(B,8, B,9, B,10),    R), 
      x(s(J,J, C,2, C,3),     R, 6), 
      x(s(D,8, D,9, J,J, D,11),   R, 38), 
      x(s(D,8, D,9, J,J, J,J),   R, 38), 

      // sames 
      x(s(A,1, A,1),      S), 
      x(s(B,4, B,4, B,4),     S), 
      x(s(C,8, C,8),      S), 
      x(s(D,3, D,3),      S), 

      // doubt-cases, assume group (TODO: verify this is correct) 
      x(s(J,J, J,J, D,4),     G, 4*3), 
      x(s(A,7, J,J, J,J),     G, 7*3), 
      x(s(J,J, D,9, J,J),     G, 9*3), 
      x(s(J,J, J,J, J,J),     G, 1), 

      // --- invalid sets 
      x(s(B,1, A,2, A,3),     I), // not same colour 
      x(s(D,11, D,12, J,J, J,J),   I), // last joker is 14 
      x(s(B,1, B,1, A,1),     I), // duplicate B1 
      x(s(A,1, A,2, A,3, A,5),   I), // gap A4 
      x(s(J,J, A,1, J,J, B,1, C,1),  I), // one J replaces D1, then nothing left to replace 
      x(s(A,1, A,2),      I), // short 
      x(s(B,1),       I), // shorter 
      x(s(A,5, A,6),      I), // short 
    }; 

    for (Object[] o : sets) { 

     TileSet s = (TileSet) o[0]; 
     Type t = (Type) o[1]; 
     int v = (Integer) o[2]; 

     System.out.println(s); 

     assertEquals(t, s.getType()); 
     assertEquals(v, s.getValue()); 

     // test isValid, though it's Too Simple To Break(R) 
     if (t == Type.INVALID) assertFalse(s.isValid()); 
     else assertTrue(s.isValid()); 
    } 

} 

क्योंकि यह सब एक परीक्षा पद्धति में है, पूरे परीक्षण के रूप में जल्द ही एक के रूप में बंद हो जाता है सरणी में तत्व विफल रहता है। क्या प्रत्येक टेस्ट आइटम के लिए कोई तरीका नहीं बनाये, उसके आस-पास कोई रास्ता है? शायद प्रतिबिंब के साथ कुछ?

+1

आप इसके माध्यम से जारी रखने के लिए विफलताओं का दावा करने की जरूरत है पर कुछ अन्य नमूने हैं कैसे इमारत के बारे में विफल होने वाले तत्वों की एक सूची, जैसा कि आप लूपिंग कर रहे हैं, फिर जोर देकर कहा कि लूप के बाद सूची खाली है? यदि यह खाली नहीं है, तो असफलताओं की सूची मुद्रित करें। – birryree

+0

@birryree आप यह कैसे करेंगे? तत्व विफल होने के बाद लूपिंग स्टॉप नहीं होगा? मैं एक शुरुआती बीटीडब्ल्यू हूँ। – papercuts

उत्तर

21

जुनीट 4 के parameterized tests का उपयोग करें। वे इस प्रकार की समस्या के लिए एकदम सही फिट हैं, हालांकि दस्तावेज़ीकरण में काफी कमी है।

यहाँ, उन्हें कैसे उपयोग करने के लिए .:

+0

यह वही है जो मुझे चाहिए। हालांकि, एक बात यह है कि परीक्षण परिणामों में परीक्षण डेटा के toString() को दिखाने का कोई तरीका है? सरणी सूचकांक द्वारा उन्हें देखना जारी रखना असुविधाजनक है। –

+0

आप या तो पैरामीटरेटेड धावक को उप-वर्गीकरण करना चाहते हैं या अपने स्वयं के कार्यान्वयन को प्रदान करना चाहते हैं और आंतरिक वर्ग 'टेस्ट क्लासरुनरफॉर पैरामीटर' –

+0

के अंदर 'getName() 'विधि को ओवरराइड करना चाहते हैं (@Test) विधि स्तर पर ऐसा कुछ संभव है? मैं कक्षा में केवल कुछ तरीकों को दोहराना चाहता हूं और मैं पहले से ही कुछ और के लिए @RunWith का उपयोग करता हूं। –

3

AssertionError पकड़ें और त्रुटियों की सूची में पकड़े गए त्रुटि को जोड़ें, अंत में सूची को खाली करने के लिए चेक करें, यदि कोई कंपाउंड AssertionError नहीं है।

+0

त्रुटियों की सूची? क्या यह सिर्फ एक सूची है जिसे मुझे बनाना होगा, या अंतर्निहित जुनीट चीज़? –

+0

@ बार्ट आपको इसे बनाना है। बीटीडब्ल्यू, 'सेटअप' में टेस्ट डेटा को चालू करने और छोटे 'परीक्षण ...' विधियों को चालू करने की एक अच्छी आदत है। – khachik

+0

मुझे पता है, लेकिन मेरे पास इसके लिए बहुत अधिक परीक्षण डेटा है (वर्तमान में क्या कुछ और विस्तार किया जाएगा)। –

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