2015-09-25 9 views
5

के भीतर "कॉमा" या "पाइप" का उपयोग करके मैं अपने परीक्षणों को पैरामीट्रिज़ करने के लिए जूनिट पैराम का उपयोग करने की कोशिश कर रहा हूं। लेकिन मेरी मुख्य समस्या यह है कि पैरामीटर विशेष पात्रों, टिल्ड या पाइप के साथ तार हैं।जूनिट पैराम्स

import org.junit.Rule; 
import org.junit.Test; 
import org.junit.rules.ExpectedException; 
import org.junit.runner.RunWith; 

import junitparams.JUnitParamsRunner; 
import junitparams.Parameters; 

@RunWith(JUnitParamsRunner.class) 
public class TheClassTest { 

    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @Test 
    @Parameters({"AA~BBB"}) 
    public void shouldTestThemethod(String value) throws Exception { 
     exception.expect(TheException.class); 

     TheClass.theMethod(value);  
     // Throw an exception if value like "A|B" or "A~B", 
     // ie if value contain a ~ or a | 
    } 
} 

टिल्डे के साथ, मुझे कोई समस्या नहीं है। लेकिन पाइप के साथ, मैं एक अपवाद है:

java.lang.IllegalArgumentException: wrong number of arguments 

पाइप, अल्पविराम के रूप में, पैरामीटर के लिए एक विभाजक के रूप में प्रयोग किया जाता है।

क्या कोई अलग विभाजक सेट करने का कोई तरीका है? या क्या यह जुनीतपराम की एक सीमा है?

+0

आप का उपयोग [इस वाक्य रचना] के आसपास काम कर सकता था (https://github.com/Pragmatists/JUnitParams/blob/master/src/test/ जावा/जूनिटपरम्स/उपयोग/नमूने_of_Usage_Test.java # L34) –

+0

मैं "\\" के साथ पाइप से बचने का प्रयास भी करूंगा, [यह नमूना] देखें (https://github.com/Pragmatists/JUnitParams/blob/master/src/ परीक्षण/जावा/जूनिटपरम्स/उपयोग/नमूने_of_Usage_Test.java # L114) –

+0

मैंने इस वाक्यविन्यास की कोशिश की, अभी भी काम नहीं करता है। अब मैं जूनिट पैराम्स के बजाय पैरामीटरेट का उपयोग कर रहा हूं। यह काम कर रहा है, लेकिन तर्क सभी जूनिट क्लास के लिए है (इसलिए मुझे एक नई कक्षा बनाना पड़ा)। "\\" काम करता है। लेकिन क्योंकि मेरे पैरामीटर पढ़ने के लिए मुश्किल हैं (पूर्ण | और ~ और अन्य विशेष पात्रों), मैं अपने इनपुट सेट में बहुत से भागने वाले चरित्र को न जोड़ना चाहता था। लेकिन हाँ, यह काम कर रहा है। – GaspardP

उत्तर

-1

आप zohhak देख सकते हैं। यह जूनिट पैराम्स के समान है लेकिन आपको पार्सिंग पैरामीटर के चारों ओर अधिक लचीलापन देता है। ऐसा लगता है कि यह 'हार्ड टू रीड' पैरामीटर से निपटने में महत्वपूर्ण मदद कर सकता है। डॉक्स से उदाहरण:

@TestWith(value="7 | 19, 23", separator="[\\|,]") 
public void mixedSeparators(int i, int j, int k) { 
    assertThat(i).isEqualTo(7); 
    assertThat(j).isEqualTo(19); 
    assertThat(k).isEqualTo(23); 
} 

@TestWith(value=" 7 = 7 > 5 => true", separator="=>") 
public void multiCharSeparator(String string, boolean bool) { 
    assertThat(string).isEqualTo("7 = 7 > 5"); 
    assertThat(bool).isTrue(); 
} 
2

मैं विभाजक वर्ण कॉन्फ़िगर करने के लिए एक विकल्प नहीं मिला है, लेकिन इन वर्ण यदि आप एक Object[][] में अपने डेटा उपलब्ध कराने के भाग निकले किए जाने की जरूरत नहीं है।

public static Object[][] provideParameters() { 
    return new Object[][] { 
     new Object[] {"A,B|C"} 
    }; 
} 

दोनों , और | सीधे इस्तेमाल किया जा सकता, जो काफी अपने परीक्षणों के पठनीयता में सुधार:

निम्न उदाहरण पर विचार करें।

इस परीक्षण कारखाने का उपयोग करने के लिए @Parameters(method = "provideParameters") के साथ अपना परीक्षण एनोटेट करें। आप कारखाने को किसी अन्य वर्ग में भी ले जा सकते हैं (उदा।, @Parameters(source = Other.class, method = "provideParameters"))।

0

आप वास्तव में डबल बैकस्लैश के साथ पाइप से बचने कर सकते हैं:

@Parameters("AA\\|BBB") 
public void test(String value) 
+0

मैं रास्ते में जुनीटपाराम्स 1.0.6 पर हूं ... –