2012-04-19 8 views
32

में विफल रहता है, मेरे पास जेफुनक का उपयोग करके मेरा मौजूदा ढांचा बनाया गया है जो परीक्षण केस में एक आवेषण विफल होने पर भी निष्कर्ष जारी रखने की सुविधा प्रदान करता है। Jfunc जूनिट 3.x ढांचे का उपयोग करता है। लेकिन अब हम जूनिट 4 में माइग्रेट कर रहे हैं, इसलिए मैं अब Jfunc का उपयोग नहीं कर सकता और इसे जूनिट 4.10 जार से बदल दिया है।
अब समस्या यह है कि हमने अपने ढांचे में व्यापक रूप से jfunc का उपयोग किया है, और जूनिट 4 के साथ हम अपने कोड को निष्पादन जारी रखना चाहते हैं, भले ही एक आवेषण परीक्षण मामले में विफल हो जाए।
क्या किसी के पास इसके लिए कोई सुझाव/विचार है, मुझे जूनिट में पता है कि परीक्षणों को अधिक परमाणु होने की आवश्यकता है यानी प्रति परीक्षण मामले में एक दावा है लेकिन हम किसी कारण से हमारे ढांचे में ऐसा नहीं कर सकते हैं।जूनिट 4 में निरंतर परीक्षण निष्पादन, जब भी एक आवेषण

उत्तर

41

आप इसे ErrorCollector नियम का उपयोग कर ऐसा कर सकते हैं।

इसका इस्तेमाल के लिए, पहले अपने परीक्षण कक्षा में एक क्षेत्र के रूप में नियम जोड़ने:

public class MyTest { 
    @Rule 
    public ErrorCollector collector = new ErrorCollector(); 

    //...tests... 
} 

फिर collector.checkThat(...) के लिए कॉल के साथ अपने का दावा है की जगह।

उदा।

@Test 
public void myTest() { 
    collector.checkThat("a", equalTo("b")); 
    collector.checkThat(1, equalTo(2)); 
} 
+1

जबाब क्रिस के लिए धन्यवाद। यह पहली विफलता के बाद काम करता रहा और जारी रहा (यानी कलेक्टर.चेकटैट (10, कोरमैटर्स.क्वैल्टो (11)))। लेकिन समस्या यह है कि मैं चाहता हूं कि यह जांच विफल हो जाए, भले ही चेक में से कोई एक विफल हो। वर्तमान में उपर्युक्त परीक्षण निष्पादित करने के बाद, परीक्षण पास के रूप में चिह्नित किया गया है। मैं चाहता हूं कि यह असफल हो और विफलता रेखा पर स्टैकट्रैक दिखाएं (जब कोई दावा विफल रहता है)। – user85

+0

यह अजीब बात है। मैंने बस अपने उत्तर में लिखे गए कोड की कोशिश की, और यह उम्मीद के अनुसार काम किया। परीक्षण विफल रहता है, और यह प्रत्येक असफल दावे के स्टैक ट्रेस को प्रिंट करता है। यहां पूर्ण परीक्षण कोड और आउटपुट जो मुझे मिला है, इंटेलिजे से परीक्षण चला रहा है: https://gist.github.com/2419626 –

+0

ओह ... मेरा बुरा, मैं बस नियम जोड़ना भूल गया और इससे सभी अराजकता ..... इस भ्रम के लिए खेद है और पोस्ट के लिए बहुत कुछ है। – user85

8

मैं त्रुटिकोलेक्टर का भी उपयोग करता हूं लेकिन assertThat का उपयोग भी करता हूं और उन्हें एक कोशिश पकड़ ब्लॉक में रखता हूं।

import static org.junit.Assert.*; 
import static org.hamcrest.Matchers.*; 

@Rule 
public ErrorCollector collector = new ErrorCollector(); 

@Test 
public void calculatedValueShouldEqualExpected() { 
    try { 
     assertThat(calculatedValue(), is(expected)); 
    } catch (Throwable t) { 
     collector.addError(t); 
     // do something 
    } 
} 
0

प्रयास/अंत में ब्लॉक का उपयोग करें। यह मेरे मामले में काम किया:

... 
try { 
    assert(...) 
} finally { 
    // code to be executed after assert 
} 
... 
+1

आपको पता है कि यह प्रश्न 2 साल पहले पोस्ट किया गया था और पहले से ही एक स्वीकार्य उत्तर है? –

+4

@TheJuniorProgrammer बस एक सामान्य नोट, यह साइट केवल स्वीकृत उत्तरों के बारे में नहीं है। मुद्दा उन उपयोगकर्ताओं की सहायता करना है जो किसी समस्या का हल ढूंढने के लिए उत्तर खोजते हैं।कभी-कभी किसी समस्या को हल करने के लिए कई दृष्टिकोण होते हैं, और कभी-कभी एक व्यक्ति के लिए जो भी काम करता है वह दूसरे के लिए भी काम नहीं कर सकता है। – nomistic

+0

@ नोमिस्टिक ठीक, पर्याप्त सच है। –

2

तुम भी उपयोग कर सकते हैं assertj - soft assertion

@Test 
public void testCollectErrors(){ 
    SoftAssertions softly = new SoftAssertions(); 
    softly.assertThat(true).isFalse(); 
    softly.assertThat(false).isTrue(); 
    // Don't forget to call SoftAssertions global verification ! 
    softly.assertAll(); 
} 

इसके अलावा बिना इसका इस्तेमाल करने के अन्य तरीके मौजूद हैं मैन्युअल रूप से आह्वान softly.assertAll();

  1. with rule
  2. with autoclosable
  3. Using the static assertSoftly method
संबंधित मुद्दे