JUnit

2012-10-22 11 views
15

में 'पहले' विधि से अलग-अलग परीक्षण को बहिष्कृत करें मेरे परीक्षण वर्ग में सभी परीक्षण प्रत्येक परीक्षण के निष्पादन से पहले 'पहले' विधि (जुनीट के @Before के साथ एनोटेटेड) निष्पादित करते हैं।JUnit

मुझे किसी विशेष परीक्षण की आवश्यकता है कि विधि से पहले इसे निष्पादित न करें।

क्या ऐसा करने का कोई तरीका है?

उत्तर

9

दुर्भाग्यवश आपको इस तर्क को कोड करना होगा। जुनीट में ऐसी सुविधा नहीं है। "पहले" चल रहा है कि एक परीक्षण की आवश्यकता होती है और दूसरा यह है कि परीक्षण है कि इस की आवश्यकता नहीं है शामिल हैं:

  1. बस अलग परीक्षण का मामला 2 के लिए परीक्षण मामलों: आम तौर पर आप 2 समाधान है।
  2. अपने स्वयं के परीक्षण को लागू करने और इसका उपयोग करने के लिए अपने परीक्षण को एनोटेट करें। अपनी खुद की एनोटेशन @RequiresBefore बनाएं और इस एनोटेशन के साथ इस परीक्षण की आवश्यकता है। परीक्षण धावक एनोटेशन को पार्स करेगा और तय करेगा कि "पहले" विधि को चलाने के लिए या नहीं।

दूसरा समाधान स्पष्ट है। पहला आसान है। उनमें से एक को चुनने के लिए आप पर निर्भर है।

15

@Enclosed धावक का उपयोग करने पर विचार करें ताकि आपको दो आंतरिक परीक्षण कक्षाएं मिल सकें। एक आवश्यक @Before विधि के साथ, दूसरा बिना।

Enclosed

@RunWith(Enclosed.class) 
public class Outter{ 

    public static class Inner1{ 

    @Before public void setup(){} 

    @Test public void test1(){} 
    } 

    public static class Inner2{ 

    // include or not the setup 
    @Before public void setup2(){} 

    @Test public void test2(){} 
    } 

} 
19

आप एक TestRule के साथ ऐसा कर सकते हैं। आप परीक्षण है कि आप कुछ विवरण की एक टिप्पणी के साथ पहले छोड़ना चाहते चिह्नित करते हैं, और फिर, TestRule में लागू विधि में, आप उस टिप्पणी के लिए परीक्षण करने और आप क्या चाहते हैं, की तरह कुछ कर सकते हैं:

public Statement apply(final Statement base, final Description description) { 
    return new Statement() { 
    @Override 
    public void evaluate() throws Throwable { 
     if (description.getAnnotation(DontRunBefore.class) == null) { 
     // run the before method here 
     } 

     base.evaluate(); 
    } 
    }; 
} 
+0

यहां अपडेट किया गया लिंक है: https://github.com/junit-team/junit/wiki/Rules। यह भी देखें: http://junit.org/apidocs/org/junit/rules/TestRule.html – Bowen

+4

क्या टेस्टरूल के भीतर से @ ब्योरा स्टेटमेंट को आसानी से निष्पादित करने का कोई तरीका है? मैं सोच रहा हूं कि '// पहले विधि को यहां चलाएं' भाग का सबसे आसान तरीका क्या है। – loeschg

0

कोई भी परीक्षण मामले के अंदर @Before सेटअप में किए गए कार्यों को पूर्ववत करके इसे हल कर सकता है। यह लग सकता है कि कैसे

@Before 
public void setup() { 
    TestDataSetupClass.setupTestData(); 
} 

@Test 
public void testServiceWithIgnoreCommonSetup() { 
    TestDataSetupClass.unSet(); 
    //Perform Test 
} 

यहाँ पेशेवरों और समाधान के लिए विपक्ष नहीं होगा है। इसके लिए मामूली कॉन, सेटिंग और अन-सेटिंग चरण का अनावश्यक चक्र है। लेकिन अगर किसी को सैकड़ों में से केवल एक टेस्ट केस के लिए ऐसा करने की ज़रूरत है और स्वयं एओपी लिखने या कई आंतरिक परीक्षण कक्षाओं को बनाए रखने से बचने के लिए इसे अच्छी तरह से जाना है।