2012-12-23 13 views
5

के साथ JUnit 4 टाइमआउट्स के दौरान अधिक जानकारी जोड़ना मैं @RunWith(value = Parameterized.class) का उपयोग कर एक जुनीट 4 परीक्षण चला रहा हूं। यह ठीक काम करता है, कोई समस्या नहीं है। हालांकि, जब मेरे 34 परीक्षण टाइमआउट में से कोई भी, मुझे केवल java.lang.Exception: test timed out after 15000 milliseconds संदेश मिलता है। मैं चाहता हूं कि यह परीक्षण के पैरामीटर को भी दिखाए।पैरामीटरकृत धावक

मैंने इसे नीचे दिए गए कोड की तरह करने की भी कोशिश की है (जो मुझे पता है कि ज्यादातर मामलों के लिए एक भयानक समाधान है, मैं बस देखना चाहता था कि मुझे कोई संदेश दिखाने के लिए संदेश मिल सकता है), लेकिन ऐसा नहीं हुआ काम, यह अभी भी ऊपर संदेश में परिणाम हुआ।

private String parameter; 

@Test(timeout = 15000) 
public void solveAll() { 
    try { 
     // ... do something that might take a long time 
    } 
    catch (Throwable e) { 
     Assert.fail(this.parameter + " failed! Because of " + e.getMessage()); 
    } 
} 

मैं JUnit भी this.parameter दिखाने के कैसे कर सकते हैं जब एक समय समाप्ति में परीक्षण के परिणाम?

यहाँ एक बहुत ही सरल उदाहरण परीक्षण वर्ग कि इस समस्या से पता चलता है:

public class ShowMyMessageTest { 
    @Test(timeout=1000) 
    public void test() { 
     try { 
      Thread.sleep(3000); 
     } 
     catch (Throwable e) { 
      Assert.fail("Timeout reached with value 42"); 
     } 
    } 
} 

इस ShowMyMessageTest के साथ मैं कभी-कभी आशा "समय समाप्त मूल्य 42 के साथ पहुँचा" हो, और कभी कभी मैं सिर्फ "java.lang मिलता है। अपवाद: 1000 मिलीसेकंड के बाद परीक्षण का समय समाप्त हो गया "। मैं हमेशा इस मामले में "मूल्य 42 के साथ टाइमआउट पहुंच गया" प्राप्त करना चाहता हूं।

उत्तर

5

यह एक हैक का एक सा है, लेकिन आप पैरामीटर की स्थिति जांचने के @After इस्तेमाल कर सकते हैं:

@RunWith(Parameterized.class) public class FooTest { 
    private boolean flag = true; 
    private String param; 

    public FooTest(String param) { 
    this.param = param; 
    } 

    @Test(timeout = 1000) public void test() { 
    while(true == flag); 
    param = null; 
    } 

    @After public void after() { 
    Assert.assertNull("Problem:" + param, param); 
    } 

    @Parameters public static Collection<Object[]> params() { 
    Object[][] params = { { "foo" } }; 
    return Arrays.asList(params); 
    } 
} 

एक वैकल्पिक अपनी खुद की runner लिखने के लिए है।

+0

@After के साथ आपका हैकी-समाधान मेरे लिए काफी अच्छा काम करता है :) –

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