Hier mal eine kurze Idee zu einem Test Framework für JUnit, welches Reports ähnlich FIT erzeugen können sollte.
Erstmal die Testklasse :
public class AnSampleTest extends ASampleBase {
@Test
@EnableArTest
public void testFails() throws Exception {
Login.user("Reinar"); // Statische Methode
isLoggedIn(); // Methode in der Basiklasse
fastExit();
noExit();
assertEquals("fail", "here");
}
private void fastExit() {
assertEquals("erwarte", "fehlschlag");
assertEquals("same", "same");
}
@EnableArTest
private void noExit() {
assertEquals("erwarte", "fehlschlag");
assertEquals("same", "same");
}
}
An den Tests ist lediglich die Annotation @EnableArTest angefügt. Die Auswertung diesr übernimmt ein Aspeket, ist der nicht aktiv, passiert nichts. Bzw. der Tests schläg fehl :
junit.framework.ComparisonFailure: null expected:<[success]> but was:<[logged in]> at junit.framework.Assert.assertEquals(Assert.java:81) ... at de.bitnoise.sample.ASampleBase.isLoggedIn(ASampleBase.java:8) ... at de.bitnoise.sample.AnSampleTest.testFails(AnSampleTest.java:1)
Das war zu erwarten, da Login.user() einen Fehler wirft. Mit aktiviertem Aspekten läuft der Test komplett durch. Erst am Ende erzeugt er eine Ausgabe mit den aufgetretenen Fehlern :
SUCCESS : Login user ERROR : Is logged in Error was : null expected:<[success]> but was:<[logged in]> ERROR : Fast exit Error was : expected:<[erwarte]> but was:<[fehlschlag]> ERROR : Assert equals Error was : expected:<[erwarte]> but was:<[fehlschlag]> SUCCESS : Assert equals ERROR : Assert equals Error was : expected:<[fail]> but was:<[here]>
Wie man sehen kann wurden 'fast' alle Methoden durchgeführt obwohl mehrere Asserts schief gingen. Genauer gesagt: alle aufgetretenen AssertionErrors in Methoden welche mit @EnableArTest annotiert sind werden unterdrückt. Gut zu sehen ist das bei dem Aufruf der Methode fastExit und noExit. Letztere ist annotiert, es werden beide Asserts ausgegeben. Während bei fastExit() nur der erste Assert als Fehler gemeldet wird und der zweite Assert schon nicht mehr ausgeführt wird.
Btw. habe mal dieses minimal Sample auf github geschoben: http://github.com/RainerW/ArTest
Diskussion