2011-02-24 10 views
6

जब मैं एनोटेशन @ टेस्ट (टाइमआउट = 3000) के साथ एक परीक्षण चलाता हूं और यह समय समाप्त हो जाता है, तो यह तुरंत परीक्षण को मारता है और @After के साथ एनोटेटेड मेरी आंसूडाउन विधि को कॉल नहीं करता है।जूनिट 4 - परीक्षण टाइमआउट पर सफाई

ऐसे परिदृश्य में साफ करने का तरीका क्या होगा?

संपादित करें: मेरा परीक्षण तार पर जाक्स-आरएस और http अनुरोध के बीच परीक्षण समय का उपयोग करके संसाधन अंत बिंदुओं का आह्वान कर रहा है। यह मामला है कि मैं काफी हद तक निश्चित हूं कि @After को लागू नहीं किया जा रहा है

उत्तर

2

कड़ाई से बोलते हुए, यह परीक्षण को मारता नहीं है, यह विफल हो जाता है। जिसका स्पष्ट अर्थ है कि @After के साथ एनोटेटेड विधि चल जाएगी।

नीचे दिया गया कोड मेरे लिए आकर्षण की तरह काम कर रहा है।

@Test(timeout=1) 
public void testTimeout() { 
    try { 
     Thread.sleep(10); 
    } catch (InterruptedException ex) {} 
} 

@After 
public void after() { 
    System.out.println("@After is invoked, indeed."); 
} 

आउटपुट है,

Testsuite: javaapplication1.MainTest 
After is invoked, indeed. 
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.054 sec 
+0

हां, मैं @After और टाइमआउट पर उपयोग कर रहा हूं जो कि प्रतीत नहीं होता है। – Prasanna

+0

@ प्र्रासाना: मैंने अपनी परीक्षा को शामिल करने के लिए अभी अपनी पोस्ट अपडेट की है। –

1

मैं टाइमआउट विशेषता के साथ कुछ समस्याएं भी था। हो सकता है कि यह आपको चार समस्याएं खोजने में मदद करता है ...

मेरे मामले में भ्रम इस तथ्य के कारण हुआ था कि @Test (timeout = ...) के साथ एनोटेटेड विधि में परीक्षण कोड एक अलग थ्रेड में चलाया जाता है। इसलिए मैंने परीक्षण के दौरान उपयोग की गई कुछ थ्रेडलोकल सामग्री को @After विधि में साफ़ नहीं किया जा सका।

+0

मेरा बुरा, मुझे और जानकारी दी जानी चाहिए थी। मेरा परीक्षण तार पर जाक्स-आरएस का उपयोग करके संसाधन अंत बिंदुओं का एक गुच्छा आमंत्रित करता है, इसलिए मुझे यकीन नहीं है कि क्या होता है जब http अनुरोध के बीच में एक परीक्षण समय होता है, मुझे लगता है कि यह परीक्षण द्वारा उत्पन्न सभी धागे को मारता है। क्या आप कुछ इसी तरह बात कर रहे हैं? – Prasanna

1
@Rule 
public Timeout to = new Timeout(300000); 

यह जुनीट 4.7 से काम करता है।

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