2013-01-10 27 views
5

में JUnit RunListener का उपयोग करके मैं प्रोजेक्ट पर काम कर रहा हूं जहां मुझे प्रत्येक जुनीट परीक्षण चलाने से पहले कुछ क्रिया करने की आवश्यकता है। इस समस्या को RunListener का उपयोग करके हल किया गया था जिसे जुनीट कोर में जोड़ा जा सकता है। परियोजना विधानसभा Maven का उपयोग किया जाता है, तो मैं अपने pom फ़ाइल में इस पंक्तियाँ:IntelliJ IDEA

mvn clean test 

लेकिन जब परीक्षण इंटेलीजे का उपयोग शुरू कर रहे हैं (अपने आंतरिक परीक्षण का उपयोग:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <properties> 
        <property> 
         <name>listener</name> 
         <value>cc.redberry.core.GlobalRunListener</value> 
        </property> 
       </properties> 
      </configuration> 
     </plugin> 

तो, सब कुछ काम करता है का उपयोग करते हुए धावक) हमारे RunListener में कोड किए गए कार्यों को निष्पादित नहीं किया गया है, इसलिए IntelliJ आधारभूत संरचना का उपयोग करके परीक्षण करना असंभव है।

जैसा कि मैंने देखा, IntelliJ इस कॉन्फ़िगरेशन को पोम फ़ाइल से पार्स नहीं करता है, तो क्या इंटेलिजे को स्पष्ट रूप से बताएं कि RunListener को जुनीट कोर में जोड़ने के लिए? कॉन्फ़िगरेशन में कुछ वीएम विकल्पों का उपयोग कर सकते हैं?

मैवेन आउटपुट पढ़ने के बजाय सुंदर इंटेलिजे परीक्षण पर्यावरण का उपयोग करना अधिक सुविधाजनक है।

पीएस मुझे जो क्रिया करने की ज़रूरत है वह मूल रूप से स्थिर वातावरण (मेरे वर्गों में कुछ स्थिर फ़ील्ड) का रीसेट है।

उत्तर

3

मुझे इंटेलिज में रनलिस्टनर निर्दिष्ट करने का कोई तरीका नहीं दिखाई दिया, लेकिन एक और समाधान आपके अपने ग्राहक पर रनर और एनोटेट @RunWith() लिखना होगा।

public class MyRunner extends BlockJUnit4ClassRunner { 
    public MyRunner(Class<?> klass) throws InitializationError { 
     super(klass); 
    } 

    @Override 
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 
     // run your code here. example: 
     Runner.value = true;    

     super.runChild(method, notifier); 
    } 
} 

नमूना स्थिर चर:

public class Runner { 
    public static boolean value = false; 
} 

फिर इस तरह अपने परीक्षण चलाने:

@RunWith(MyRunner.class) 
public class MyRunnerTest { 
    @Test 
    public void testRunChild() { 
     Assert.assertTrue(Runner.value); 
    } 
} 

यह आपको एक RunListener के बिना अपने स्थिर प्रारंभ करने की अनुमति देगा।

+0

अन्य समाधान के लिए धन्यवाद! अब मैं अपने सभी टेस्ट क्लास के लिए निर्दिष्ट '@ पहले' विधि के साथ एक वैश्विक अभिभावक को जोड़ने के बारे में सोच रहा हूं। तो, किसी भी मामले में मुझे अपनी सभी टेस्ट फाइलों को संपादित करना होगा। :(मैं इस सुविधा को जोड़ने के लिए इंटेलिजे बग ट्रैकर में टिकट बनाउंगा। – dbolotin

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

  • कोई संबंधित समस्या नहीं^_^