2016-11-01 4 views
1

in meinem Junit Tests habe ich einen Testfall, der nur fehlschlagen muss, wenn IOexception von meinem Objekt im Test geworfen wird.Mit @Test und erwarteten

Wenn mein Objekt also IllegalStateException (oder einen anderen Fehler oder eine Ausnahme) auslöst, ist mein Testfall OK, aber wenn mein Objekt IOexception wirft, muss mein Testfall fehlschlagen.

Wie kann ich es tun?

Danke für alle.

+0

können Sie Ihren Code anzeigen? –

Antwort

0

Wie Sie scheitern wollen, wenn Ausnahme nicht eine IOException ist, können Sie das tun, indem Sie die IOException Fang- und behaupten mit fail() wie unten:

@Test 
public void yourTestScenario() { 
    try { 
     //code that throws IOException and other Exceptions 
    } catch(IOException ioexe) { 
     Assert.fail(); 
    } catch(Exception exe) { 
     //Ignore 
    } 
} 
+0

Dies ist ein Antipattern. Sie können JUnit oder AssertJ verwenden, um ausgelöste Ausnahmen zu überprüfen. –

+0

Haben Sie Fragen gestellt? Er möchte eine NOT IOException-Bedingung, keine erwartete Bedingung und beide will er in einer einzigen Methode behandeln – developer

+0

Bitte sehen Sie meine vorgeschlagene Antwort. Es ist verlockend, versuchen/fangen in Testmethoden, aber es ist wahrscheinlich nicht die beste Antwort. –

0

Sie können die erwartete Ausnahme verwenden Regel

@Rule 
public ExpectedException expected = new ExpectedException(); 


@Test 
public void doSomethingWithNoIOException() { 
    // we expect an exception that's NOT an instance of IOException 
    // you'll need to static import the hamcrest matchers referenced below 
    expected.expect(not(instanceOf(IOException.class)); 

    // call the method under test 
    callSomething(); 
} 
+0

Ich weiß das, aber was ist der Vorteil, den wir mit diesem Ansatz erreichen, also ziehe ich meinen vor, da er ziemlich einfach aussieht? Ich denke, es ist vollständig meinungsbasiert und wir können einem der Ansätze folgen. – developer

+0

Es sieht so aus, als ob Sie versuchen, ein Argument zu starten. Das oben genannte verwendet die Test-Frameworks. Eine Alternative mit try/catch tendiert dazu, außerhalb des Test-Frameworks zu arbeiten. Meine Vorliebe wäre, AssertJ zu verwenden, wo Sie das Beste beider Welten haben können. –

Verwandte Themen