2016-06-23 2 views
0

Gibt es eine Möglichkeit, den Namen der Methode programmatisch zu erhalten, die in einem JUnit-Testfall fehlschlägt? , d. H. Wenn Assert.assertTrue (ClassName.methodName) in @Test fehlschlägt, kann ich nur den Namen der @Test-Methode erhalten, die die Assertion hat, aber nicht in der Lage ist, methodName zu erhalten, was die Assertion nicht bestanden hat. Wir haben fast 300 JUnit-Tests mit jeweils eigenen @BeforeClass-, @Before, @Test-, @After- und @AfterClass-Methoden und möchten den Methodennamen protokollieren, der die Assertion nicht bestanden hat.Wie können wir den Namen der Methode erhalten, die die Assertion fehlgeschlagen ist

+2

Dies ist keine Antwort auf Ihre Frage, aber hoffentlich immer noch hilfreich. Erwägen Sie, Ihre Tests neu zu schreiben, sodass jede Testmethode eine einzige Assertion enthält. Dann sind der Name des Tests und die Methode, die die (gescheiterte) Assertion enthält, identisch. Mit diesem Ansatz erhalten Sie auch andere Vorteile, die hier nicht berücksichtigt werden. –

+0

Über was C-Otto schrieb ... denken Sie daran, dass die Idee der Komponententests Ihnen helfen soll, Ihre Probleme ** schnell zu isolieren/zu lösen **. Also, wenn dein Setup so kompliziert ist, dass du so viel "prep/teardown" -Code brauchst ... vielleicht sagt dir das nur, dass du für eine Sekunde zurücktreten und überlegen solltest, wie du deine Tests "verbessern" kannst ein Weg, der sie ... besser macht, auf Probleme aufmerksam zu machen. – GhostCat

+0

Tatsächlich verwenden wir JUnit, um Regressionstestszenarien zu automatisieren (!!) Wir haben bereits über 300 Szenarien automatisiert und das Umschreiben aller Tests wäre teuer.
Wir wollten beim Identifizieren von Testfehlern Zeit sparen, indem Sie die fehlgeschlagenen Methoden speziell protokollieren, sodass wir nicht die gesamte Protokolldatei durchsuchen müssen, um die Fehlerursache zu finden.
Von Assertion Failure Stack-Ablaufverfolgung kann ich die Zeile in dem Skript abrufen, das den Fehler enthält. Gibt es eine Möglichkeit, den Inhalt dieser Java-Dateizeile aus dem ausführbaren Jar zu holen? Ich denke, das ist die einzige verbleibende Option. –

Antwort

0

Werfen Sie einen Blick auf https://github.com/swfsm/junit-fail-logger.
Es ist ein Annotationsprozessor, der in der Kompilierungszeit Methoden mit der Anmerkung org.junit.Test annotiert und Assertions mit try catch blockiert, um fehlgeschlagene Assertion zu protokollieren.
So

assertTrue(myMethod("")); 

wird

try { 
    assertTrue(myMethod()); 
} catch (AssertionError e) { 
    System.err.println("assertTrue(myMethod())") 
    throw(e); 
} 

Verfahren transformiert werden, die konfigurierbar zum Protokollieren aufgerufen wird und jede statische Methode String Parameter akzeptieren kann (Wertparameter konfigurierbar und ist).

Verwandte Themen