2016-04-26 5 views
0

Ich habe hier einen JUnit-Testfall, um eine einfache Klasse zu testen. Grundsätzlich enthält die Klasse nur eine Methode namens "sum", die die Summe zweier Zahlen zurückgibt. Um zu testen, ob dies richtig ist, verwende ich die folgende Methode: Assert.assertEquals(2, my_object.sum(1, 2)); Das Ergebnis wird in einer Registerkarte auf Eclipse in einem Abschnitt namens "Fehler Trace" angezeigt. Die Nachricht lautet: junit.framework.AssertionFailedError: expected:<2> but was:<3>. Ist es möglich, diese Nachricht zu erhalten und in eine String-Variable zu schreiben?Wie bekomme ich eine Ausgabe von JUnit assertEquals() -Methode und legte es in eine Variable?

+2

Was zu tun versuchen Sie wirklich? – sisyphus

+1

Warum möchten Sie das tun? –

+0

Da ich ein Web-System erstellen muss, um Klassen mit JUnit-Testfällen als Hausaufgabe zu bewerten, muss ich diese Nachricht nehmen und sie dem Endbenutzer zeigen. –

Antwort

1

aus der Java-doc assertEquals wird

Asserts that two objects are equal. If they are not, an AssertionError without a message is thrown. If expected and actual are null, they are considered equal.

Sie haben AssertionError zu fangen, wenn Ihr Zustand ausfällt.

diesen Code Versuchen:

@Test 
    public void myTest() throws Exception{ 
     String assertionError = null; 
     try { 
      Assert.assertEquals(2,3); 
     } 
     catch (AssertionError ae) { 
      assertionError = ae.toString(); 
     } 
     System.out.println(assertionError); 

    } 

OUTPUT:

java.lang.AssertionError: expected:<2> but was:<3>

Für weitere Informationen über AssertionError Besuch java doc: AssertionError und Assert

+0

Sorry, aber was ist der Sinn dieses? Die Idee der JUnit-Tests besteht darin, eine ** automatisierte ** Ausführung zu ermöglichen. Das gesamte Framework basiert auf der Idee, dass fehlgeschlagene Testfälle ... AssertionErrors werfen; und das Framework, das all Ihre Tests ausführt, fängt sie ab. Sicher, Sie können sie selbst fangen, aber wenn Sie das tun, können Sie die ganzen neun Meter gehen und alle Junit-Tests komplett wegwerfen. Weil du es nur ** wertlos gemacht hast **. – GhostCat

+0

@ Jägermeister Du hast absolut recht. Es hat keinen Sinn, den AssertionError abzufangen. Da das OP diese spezifische Frage gestellt hat (für seine Hausaufgaben), habe ich geantwortet. – Unknown

+0

Ich habe diesen Teil; Ich habe mich nur gefragt, ob es eine tiefere Bedeutung gibt, die ich vermisse. Wie in: sogar Hausaufgaben; Sie würden erwarten, dass Lehrer nach "vernünftigen" Dingen fragen sollten; anstatt die Schüler zu bitten, einen Rahmen völlig "kaputt" zu benutzen. – GhostCat

4

assertEquals ist eine void Methode. Sie können das Ergebnis nicht als Variable angeben. Aber Sie können die Ausnahme mit try/catch Block erhalten.

try{ 
    assertEquals("foo", "foo1"); //will fail 
} catch(AssertionError e){ 
    String message = e.getMessage(); 
    //do whatever you want with e 
} 
+0

Ich habe es versucht, aber es funktioniert nicht. Eigentlich geht das nicht zum Catch, wenn das assertEquals fehlschlägt. Die nächsten Zeilen werden nicht ausgeführt, wenn sie fehlschlagen. –

+1

Mein schlechtes, reparierte es! Das Problem ist, dass 'AssertionError'' Exception' nicht um 'Error' erweitert. Daher ist es besser, 'AssertionError' zu fangen, wie @Unknown vorgeschlagen. –

Verwandte Themen