JUnit-Log auslesen

Twaldigas

Mitglied
Guten Tag Java-Community,

ich arbeite zur Zeit mit JUnit und über Eclipse hat man ja eine schöne Oberfläche auf der man sieht, welche Tests erfolgreich durchgeführt wurden und welche nicht. Außerdem sieht man ja im Log, wenn ein Test fehlgeschlagen ist, warum. Nun möchte ich genau diese Informationen, die mir dort ausgegeben werden, auslesen und mit Java in eine Datenbank schreiben. Leider habe ich keinen Weg gefunden, wie man das bewerkstelligen kann.

Dass man die Informationen via Ant als HTML-Report ausgeben kann, weiß ich. Ich möchte die Informationen aber in einer Datenbank stehen haben, um mit ihnen weiter arbeiten zu können.

Ich hoffe, dass Ihr mir da vielleicht weiter helfen könnt.

Gruß Twaldigas
 

Guardi

Bekanntes Mitglied
Ich hatte dafür mal eine abstrakte Klasse mit folgender Methode gebaut:

Java:
	@Test
	public void testRun() throws Exception{
		
		try {
			runTestImpl();
		} catch (Exception e) {
			logger.error(e.getLocalizedMessage());
			throw e;
		}
		  catch(AssertionError e){
			  logger.error(e.getLocalizedMessage());
			  throw e;
		  }
		  
		  logger.info("SUCCESS");
	}

public abstract void runTestImpl() throws Exception;

runTestImpl muss dann einfach nach Wünschen überschrieben werden.
Ich hab die abstrakte Klasse unter anderem noch dazu genutzt externe Konfigurationen zu laden und zu setzen, die sich auf alle Tests beziehen.

edit: Das ist natürlich ein allgemeiner Hinweis. Anstatt eines Loggers kannst du die Daten ja irgendwo sonst speichern.
 
Zuletzt bearbeitet:

FArt

Top Contributor
Ich frage mich wofür man das braucht.

Sinnvoll ist es z.B. bei einem NightlyBuild oder CI... aber dafür gibt es fertige Tools, die das ganze auch noch schön aufbereiten, z.B. Jenkins, ...
 

Guardi

Bekanntes Mitglied
Ich habs definitiv gebraucht.
Allerdings hatte der Logger bei mir vielfältige Aufgaben.
Ich habe einen TestAutomaten entwickelt der neben den blossen Testergebnissen verschiedene Ereignisse usw. mitloggen sollte, da der TestAutomat permanent mit anderen TestDaten gefüttert wurde.
 
M

maki

Gast
Logging mit einem Logger in Tests ist in 99% der Fälle Blödsinn.
Entweder ein Test geht durch, oder es schlägt fehl (mit Meldung). Alles andere ist Quatsch.

Der TS will kein Logging, er will die Ergebnisse der Tests, je nachdem wie die TEsts aufgeführt werden (Maven, Ant, Manuell) werden solche Reports erstellt, oder eben nicht.
Wie startet der TS denn seine Tests?
 

FArt

Top Contributor
Ich habs definitiv gebraucht.
Allerdings hatte der Logger bei mir vielfältige Aufgaben.
Ich habe einen TestAutomaten entwickelt der neben den blossen Testergebnissen verschiedene Ereignisse usw. mitloggen sollte, da der TestAutomat permanent mit anderen TestDaten gefüttert wurde.

Hört sich m.E. noch seltsamer an... ein Logger mit vielfältigen Aufgaben (separation of concerns?) ... Tests mit permanent andere Testdaten (sind die denn deterministisch?)...
*grübel*

Das kann ich doch ohne große Implementierung mit einem CI Tool erreichen, oder was kann der TestAutomat besonderes, was ihn einzigartig macht?
 

Twaldigas

Mitglied
@FArt
Genau für so etwas brauche ich das auch. Aber jetzt wohl nicht mehr, denn du hast mir ja ein schönes Beispiel (Jenkins) genannt, welches ich sogar schon kenne, aber vergessen hatte. DANKE!

@Guardi
Vielen Dank für den Quelltext. Auch wenn ich es jetzt erst einmal mit einem Tool versuchen werde, so werden ich für diesen Quelltext bestimmt eine Einsatzmöglichkeit finden. Vielleicht gefallen mir die vorhandenen Tools ja auch nicht und dann entwickle ich halt doch mein eigenes.

Vielen Dank an euch beide für die schnelle Antwort. Noch einen schönen Freitag und ein entspanntes Wochenende wünsche ich euch.
 

Guardi

Bekanntes Mitglied
Hört sich m.E. noch seltsamer an... ein Logger mit vielfältigen Aufgaben (separation of concerns?) ... Tests mit permanent andere Testdaten (sind die denn deterministisch?)...
*grübel*

Das kann ich doch ohne große Implementierung mit einem CI Tool erreichen, oder was kann der TestAutomat besonderes, was ihn einzigartig macht?

Es geht um step-by-step Testen von WebOberflächen, Details erspare ich mir an dieser Stelle.
Und bekanntermaßen gibt es in einer Web-Oberfläche oft unterschiedliche Wege zum Ziel, verschiedene Sprachversionen, unterschiedliche Rollen etc etc.
Willst du dafür überall redundanten Code schreiben? Also ich nicht.

Nun sagt mir der Stacktrace einer Exception aber zu wenig aus um die Ursache und den Punkt des Problems wirklich zu finden. Außerdem sind solche Tests nicht reine Entwickler-Tests und sollen deswegen einfach besser lesbar sein.
 
Zuletzt bearbeitet:
M

maki

Gast
Außerdem sind solche Tests nicht reine Entwickler-Tests und sollen deswegen einfach besser lesbar sein.
Wenn Logausgaben wichtig für das Ergebniss eines Tests sind, sind es keine automatisierten Tests, solange die Logausgaben auch nicht automatisiert geparst werden ;)

JUnit ist für autom. Tests gedacht, die müssen selbstständig, ohne zus. "Menschen" feststellen können ob etwas geht oder nicht.
 

FArt

Top Contributor
Es geht um step-by-step Testen von WebOberflächen, Details erspare ich mir an dieser Stelle.
Und bekanntermaßen gibt es in einer Web-Oberfläche oft unterschiedliche Wege zum Ziel, verschiedene Sprachversionen, unterschiedliche Rollen etc etc.
Willst du dafür überall redundanten Code schreiben? Also ich nicht.

Nun sagt mir der Stacktrace einer Exception aber zu wenig aus um die Ursache und den Punkt des Problems wirklich zu finden. Außerdem sind solche Tests nicht reine Entwickler-Tests und sollen deswegen einfach besser lesbar sein.

Wieso redundanter Code? Ich verstehe das Problem bzw. den Bedarf nicht. Kann sein, dass bei euch der Bedarf dafür gegeben ist, aber die Begründungen hören sich alle nach suboptimalem Design an.

Mehr intensives Unit-Testing erspart in der Regel viel Aufwand für so großartig angelegte Integrationstest. Und dann hat auch Maki Recht, denn bei solchen Tests kann man oft auf Logfiles verzichten. Hilfreich sind sie aber allemal bei (aus Versehen) nicht deterministische Tests ;-)

Aber egal.. wir schweifen ab... der TS ist zufrieden :)
 

mvitz

Top Contributor
Ansonsten ginge auch so etwas:

Java:
package de.mvitz.examples.junit;

import org.junit.Rule;
import org.junit.rules.MethodRule;
import org.junit.rules.TestWatchman;
import org.junit.runners.model.FrameworkMethod;

public abstract class AbstractLoggingBaseTest {
    @Rule
    public MethodRule watchman = new TestWatchman() {
        @Override
        public void succeeded(FrameworkMethod aMethod) {
            System.out.print(".");
        }

        @Override
        public void failed(Throwable aE, FrameworkMethod aMethod) {
            System.out.print("E");
        }
    };
}

Java:
package de.mvitz.examples.junit.rules;

import static org.junit.Assert.fail;
import org.junit.Test;
import de.mvitz.examples.junit.AbstractLoggingBaseTest;

public class MethodRuleTest extends AbstractLoggingBaseTest {
    @Test
    public void failingTest() throws Exception {
        fail();
    }
    @Test
    public void passingTest() throws Exception {
    }
}

Natürlich die Sysouts dann durch einen anderen Aufruf ersetzen.
 

FArt

Top Contributor
Ansonsten ginge auch so etwas:

Java:
package de.mvitz.examples.junit;

import org.junit.Rule;
import org.junit.rules.MethodRule;
import org.junit.rules.TestWatchman;
import org.junit.runners.model.FrameworkMethod;

public abstract class AbstractLoggingBaseTest {
    @Rule
    public MethodRule watchman = new TestWatchman() {
        @Override
        public void succeeded(FrameworkMethod aMethod) {
            System.out.print(".");
        }

        @Override
        public void failed(Throwable aE, FrameworkMethod aMethod) {
            System.out.print("E");
        }
    };
}

Java:
package de.mvitz.examples.junit.rules;

import static org.junit.Assert.fail;
import org.junit.Test;
import de.mvitz.examples.junit.AbstractLoggingBaseTest;

public class MethodRuleTest extends AbstractLoggingBaseTest {
    @Test
    public void failingTest() throws Exception {
        fail();
    }
    @Test
    public void passingTest() throws Exception {
    }
}

Natürlich die Sysouts dann durch einen anderen Aufruf ersetzen.

Obiges Beispiel hat einige Nachteile:
Erfolg und Misserfolg müssen explizit aufgerufen werden (hast du auch vergessen) und wenn du nicht Throwable fängst, gehen dir auch noch Informationen durch die Lappen.

Es hätte mich gewundert, wenn es dafür nicht eine Standardlösung gegebnen hätte: RunListener (JUnit API)
 

mvitz

Top Contributor
Ich verstehe deine Aussage nicht:

1) Erfolg und Misserfolg müssen explizit aufgerufen werden (hast du auch vergessen)
Wo muss was aufgerufen werden? Die beiden Methoden succeeded und failed werden automatisch nach jedem Test aufgerufen (durch das JUnit Framework).

2) und wenn du nicht Throwable fängst, gehen dir auch noch Informationen durch die Lappen.
Wo muss ich Throwable fangen? Im Test mit Sicherheit nicht, denn eine unerwartete Exception --> failed (auch ein fehlgeschlagenes Assert ist "nur" eine Exception). In der failed Methode muss ich auch nichts catchen, kann aber über den Throwable Parameter auf die Exception zugreifen.
 

FArt

Top Contributor
Ich verstehe deine Aussage nicht:

1) Erfolg und Misserfolg müssen explizit aufgerufen werden (hast du auch vergessen)
Wo muss was aufgerufen werden? Die beiden Methoden succeeded und failed werden automatisch nach jedem Test aufgerufen (durch das JUnit Framework).

2) und wenn du nicht Throwable fängst, gehen dir auch noch Informationen durch die Lappen.
Wo muss ich Throwable fangen? Im Test mit Sicherheit nicht, denn eine unerwartete Exception --> failed (auch ein fehlgeschlagenes Assert ist "nur" eine Exception). In der failed Methode muss ich auch nichts catchen, kann aber über den Throwable Parameter auf die Exception zugreifen.

Da hast du Recht. Ich habe die @Rule Annotation übersehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Junit Test Allgemeine Java-Themen 8
J Junit surefire: enrich test information Allgemeine Java-Themen 0
J Junit start surefire for manual testing Allgemeine Java-Themen 1
P No JUnit tests found Allgemeine Java-Themen 5
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
K Input/Output JUnit: Log Inhalte, falsche Assertion Allgemeine Java-Themen 2
H OOP Testen einer Exception mit JUnit Allgemeine Java-Themen 8
AssELAss Junit-Tests für SQL-Veribindung sowie SQL-Queries? Allgemeine Java-Themen 3
O Maven - JUnit - H2 Allgemeine Java-Themen 1
M Selenium JUnit Tests (Auswahl von Testmethoden auswerten) Allgemeine Java-Themen 5
C JUNIT - ANT - build.xml Allgemeine Java-Themen 0
Airwolf89 JUnit: Vorschläge/ Best Practice Allgemeine Java-Themen 7
M JUnit Serverseitig? Wie geht sowas? Allgemeine Java-Themen 2
E JUnit wie Testergebnisse pro Test ("Test Report") erhalten? Allgemeine Java-Themen 1
B JUnit Zufalls Operation testen Allgemeine Java-Themen 1
P JUnit Allgemeine Java-Themen 2
B jUnit 4: Wie protokolliert man Testergebnisse? Allgemeine Java-Themen 1
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
M JUnit Test Suites Allgemeine Java-Themen 2
L JUnit - automatisiertes vs. manuelles Testen? Allgemeine Java-Themen 6
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
A JUnit/Hashcode Problem Allgemeine Java-Themen 5
X Problem mit URLClassLoader und JUnit Allgemeine Java-Themen 3
N JUnit Allgemeine Java-Themen 13
M Junit Tests durchführen Allgemeine Java-Themen 18
M JVM Probleme JUnit Allgemeine Java-Themen 2
G NUnit Features in JUnit Allgemeine Java-Themen 2
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
A JUnit problem Allgemeine Java-Themen 9
T Organisation von Junit Testfällen? Allgemeine Java-Themen 2
M JUnit Tests vs. DBUnit Tests Allgemeine Java-Themen 3
P Klassen Junit test funktioniert nicht... Allgemeine Java-Themen 11
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
U Fehler: Hauptklasse org.junit.runner.JUnitCore konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 2
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
J JUnit-Tests Zeichensatzproblem ? Allgemeine Java-Themen 2
J JUnit, TestCase vs "einfacher" Test Allgemeine Java-Themen 3
S [JUnit] Name von TestCase bekommen Allgemeine Java-Themen 4
1 JUnit Test Suit Allgemeine Java-Themen 2
T Junit-Tests in Java Klasse ausführen Allgemeine Java-Themen 26
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
M JUnit TestSuite erstellen Allgemeine Java-Themen 2
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
G Testcases mit Junit auf private-Methode Allgemeine Java-Themen 7
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
C JUnit und das Zulassen von RuntimeExceptions Allgemeine Java-Themen 5
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
C JUnit Tests Allgemeine Java-Themen 4
fastjack JUnit Supplementary Classes Allgemeine Java-Themen 4
O Junit Reports / Logs als XML ohne Maven/Ant Allgemeine Java-Themen 7
M Junit und Mocks Allgemeine Java-Themen 5
fastjack jUnit und Test von equals, hashCode, toString Allgemeine Java-Themen 11
D junit - frage zu fixtures/test suites Allgemeine Java-Themen 11
A Seltsames Verhalten von JUnit-Tests im Zusammenspiel mit Ant Allgemeine Java-Themen 6
S JUnit: Erzeugen einer IOException Allgemeine Java-Themen 9
G JUnit Tests Allgemeine Java-Themen 7
G JUnit Test Allgemeine Java-Themen 5
S JUnit - was mocken, was nicht? Allgemeine Java-Themen 3
S JUnit TesSuite und @Repeat Allgemeine Java-Themen 2
S JUnit Tests für GUI / Oberflächen Allgemeine Java-Themen 2
M Junit und Mocks bei JDBC Daos Allgemeine Java-Themen 8
M JUnit Problem mit AssertionFailedError Allgemeine Java-Themen 2
B Testfälle mit JUnit Allgemeine Java-Themen 4
S JUnit Allgemeine Java-Themen 15
N ClassNotFound Exception bei JUnit Test? Allgemeine Java-Themen 2
G ANT Tutorial . Schritte bzgl. Junit Bibliothek Allgemeine Java-Themen 4
A JUnit Reports zu groß für XSLT Allgemeine Java-Themen 4
M JUnit und dynamische Tests Allgemeine Java-Themen 11
P JUnit unter Eclipse: Problem mit Exception Allgemeine Java-Themen 8
GilbertGrape Warum schlägt JUnit-Test fehl? Allgemeine Java-Themen 19
K Bekomme JUnit TEst nicht zum laufen :( Allgemeine Java-Themen 9
K Junit: Frage zum Ablauf Allgemeine Java-Themen 3
K JUnit: Tests über ant aufrufen Allgemeine Java-Themen 2
S JUnit und EasyMock Allgemeine Java-Themen 7
B Wie alt ist JUnit? Allgemeine Java-Themen 2
A Junit Exceptions testen Allgemeine Java-Themen 3
P Testen mit JUnit Allgemeine Java-Themen 8
7 JUnit: Testproblem. Allgemeine Java-Themen 23
G Ant + JUnit Allgemeine Java-Themen 2
F JUnit unter Ant Allgemeine Java-Themen 3
S Integer zu int konvertieren - JUnit Allgemeine Java-Themen 12
G testen mit JUnit? Allgemeine Java-Themen 3
K JUnit 4 User Interaktion Allgemeine Java-Themen 7
M Ant + Junit + Testclass in Jar Allgemeine Java-Themen 3
G Junit 4 - TestSuite Allgemeine Java-Themen 6
B JUnit Allgemeine Java-Themen 2
T CheckStyle, JUnit und FindBugs aus Java-Programm starten Allgemeine Java-Themen 2
S JUnit will ins Netz! Allgemeine Java-Themen 2
B JUnit - Gleichen Test x-mal durchlaufen Allgemeine Java-Themen 2
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
H JUnit Allgemeine Java-Themen 5
N Problem mit Ant und JUnit Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben