JUnit Suite frage

Thaitanium

Mitglied
Hallo, ich bin neu bei Java und im Forum.

Ich habe eine frage und zwar habe ich zwei Testklassen in einem Package sowie eine Testsuite in dem selben Package. Diese Testsuite führt beide Testklassen nacheinander aus. Das funktioniert auch alles einwandfrei. Wenn nun Testklasse A fehlschlägt wird eine Mail mit einer Log Datei verschickt. Dann läuft Testklasse B durch und läuft durch. Diese information steht nun aber nicht in der Log Datei der Mail weil diese ja schon vorher verschickt wird (nämlich beim fehlschlagen der Testklasse A). Ich möchte das ganze gern so implementieren, dass beide Testklassen erst komplett durchlaufen und dann geschaut wird ob eine davon fehlschlägt und erst wenn das der Fall ist, soll eine Mail versendet werden.
Leider habe ich gerade keine Idee wie ich das umsetzen kann. Hat jemand eine Idee?

Besten Dank im Voraus.
 
F

Firephoenix

Gast
Ich kenne den genauen Aufbau leider nicht, aber ist es nicht Möglich dieLogging-logik von A auf die Ebene der Suite heraufzuziehen?
JUnit ist doch beim Zusammenfassen von Tests relativ modular.
Gruß
 

Thaitanium

Mitglied
Hallo Firephoenix,

leider weiss ich nicht genau wie du das meinst. In der Suite rufe ich nur die Zwei Testklassen auf.
Jetzt versuche ich gerade irgendwie das Email versenden in der Suite einzubauen, und zwar so dass nur eine Mail gesendet wird wenn ein Test fehlschlägt und dementsprechend auch erst dann wenn beide Testklassen durch sind. Da ich noch Anfänger bin weiß ich leider noch nicht so genau wie ich das implementieren soll. Aber das wäre so mein erster Lösungsansatz. Vllt fällt Dir ja noch was ein.

Gruß
 
F

Firephoenix

Gast
Wie genau sieht dein Mail-versenden denn aus?
Prüfst du händisch in jedem Test ob er fehlschlagen wird und gibst das entsprechend in das Log oder arbeitest du mit irgendwelchen Listenern von JUnit?

Ich hab gerade mal bei mir eine Version gebastelt bei der ich eine Suite in Eclipse mit JUnit 4 ausführe und dabei einen eigenen Runner verwende um noch ein Log dazu zu basteln (ergibt die normale Testview in Eclipse und ordentlich Konsolenoutput). Ich weiß aber nicht wie weit du das auf deine Anforderungen adaptieren kannst (bin selber kein JUnit-Experte - vielleicht kennt noch jemand einen eleganteren Weg?).
Aus den Description bzw Result-Klassen von Junit kriegt man aber ne Menge infos raus denke ich.

Hab dir meine Klassen mal angehängt, zum Ausführen in Eclipse einfach die AllTests als Junit-Test starten.

Java:
import org.junit.runner.RunWith;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(MySuite.class)
@SuiteClasses({ TestsA.class, TestsB.class })
public class AllTests {

}

Java:
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;

public class MySuite extends Suite {

	// den konstruktor scheint junit zu verwenden, die anderen habe ich daher
	// nicht überschrieben (suite hat noch 4 andere Konstruktoren)
	public MySuite(Class<?> klass, RunnerBuilder builder)
			throws InitializationError {
		super(klass, builder);
	}

	@Override
	public void run(RunNotifier rn) {
		rn.addListener(new LoggingRunListener());
		super.run(rn);
	}

}

Java:
import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;

public class LoggingRunListener extends RunListener {

	private List<String> logs = new ArrayList<String>();

	public void testFailure(Failure failure) throws Exception {
		super.testFailure(failure);
		logs.add("Fehler: " + failure.toString());
	}

	public void testFinished(Description description) throws Exception {
		super.testFinished(description);
		logs.add("Finished: " + description.toString());
	}

	public void testIgnored(Description description) throws Exception {
		super.testIgnored(description);
		logs.add("Ignored: " + description.toString());
	}

	public void testRunFinished(Result result) throws Exception {
		super.testRunFinished(result);		
		printLogs();
		printResult(result);
	}

	private void printResult(Result r) {
		System.out.println("Result");
		String result = "Ausführungszeit: " + r.getRunTime() + " Tests: "
				+ r.getRunCount() + " Ignoriert: " + r.getIgnoreCount()
				+ " Fehlgeschlagen: " + r.getFailureCount();
		System.out.println(result);
		for (Failure f : r.getFailures()) {
			System.out.println("Fehler: "+f.getTestHeader());
			System.out.println(f.getException().toString());
		}
	}

	private void printLogs() {
		for (String log : logs) {
			System.out.println(log);
		}

	}

	public void testRunStarted(Description description) throws Exception {
		super.testRunStarted(description);
		logs.add("Run started: " + description.toString());
	}

	public void testStarted(Description description) throws Exception {
		super.testStarted(description);
		logs.add("Test gestartet: " + description.toString());
	}
}

Java:
public class TestsA {

	
	@Test
	@Ignore
	public void test0(){
	}
	
	@Test
	public void test1(){
		assertTrue("Fehler im test1",false);
	}
	
	@Test
	public void test2(){
		assertTrue(true);
	}
}

Java:
public class TestsB {

	
	@Test
	public void test3(){
		assertTrue("Fehler im test3",false);
	}
	
	@Test
	public void test4(){
		assertTrue(true);
	}
	
	@Test
	public void test(){
		throw new RuntimeException();
	}
}

Meine spartanische Ausgabe:
Ignored: test0(tests.TestsA)
Test gestartet: test1(tests.TestsA)
Fehler: test1(tests.TestsA): Fehler im test1
Finished: test1(tests.TestsA)
Test gestartet: test2(tests.TestsA)
Finished: test2(tests.TestsA)
Test gestartet: test(tests.TestsB)
Fehler: test(tests.TestsB): null
Finished: test(tests.TestsB)
Test gestartet: test3(tests.TestsB)
Fehler: test3(tests.TestsB): Fehler im test3
Finished: test3(tests.TestsB)
Test gestartet: test4(tests.TestsB)
Finished: test4(tests.TestsB)
Result
Ausführungszeit: 18 Tests: 5 Ignoriert: 1 Fehlgeschlagen: 3
Fehler: test1(tests.TestsA)
java.lang.AssertionError: Fehler im test1
Fehler: test(tests.TestsB)
java.lang.RuntimeException
Fehler: test3(tests.TestsB)
java.lang.AssertionError: Fehler im test3

Hilft dir das weiter?
Gruß
 

Thaitanium

Mitglied
Hey also erstmal Danke schonmal für Deine Mühe.

Ich habe eine Klasse die sich aufs Mailen + LogDatei im Anhang konzentriert. Die macht nix anderes außer sich beim Server einzuloggen eine Mail mit text + Log im Anhang zu verschicken.
Testklasse A macht dann seinen Kram in einem Try Catch Block und in dem Catch Block wird dann eben die Mail versenden Klasse aufgerufen. Selbes Spiel für Testklasse B. Wenn jetzt TestA fehlschlägt schreibt er das direkt ins Log und ruft die MailSenden Methode aus der Mail Klasse auf. Problem ist nur dass TestB ja auch noch was in die Log schreibt, was dann aber nicht mit in der Mail steht weil diese ja vorher schon verschickt wird. Ich würde gerne das Ergebnis aus TestA und das Ergebnis aus TestB in jeweils eigene Variablen schreiben wenn das geht. Ich weiß aber auch nicht ob das Sinn macht... Vllt gibts da schönere Lösungen. Ich hoffe das Problem der unvollständigen Log-Datei in der Mail wird klar.
Wenn ich die Testklassen einzeln ausführe läuft ja alles wunderbar, da in beiden Klassen jeder für sich das mail senden aufruft.
Hilft es vllt wenn ich ein paar Auszüge aus meinem Code Poste?

Gruß
 
F

Firephoenix

Gast
Try-catch sollte in JUnit eigentlich (fast) nicht benötigt werden (Ausnahmen gibt es immer :) )
Wenn du einen groben Überblick geben kannst wäre das super, muss aber nicht der ganze Code sein, ein grobes Schema vom Aufbau reicht.
Gruß
 

Thaitanium

Mitglied
Hey,
Problem ist gelöst. :)
Meine JUnit klassen wurden von der Basis her mit Selenium erstellt. Da hat er von sich aus schon einen try catch Block erstellt.
Ich hab das so übernommen und entsprechend meinen Anforderungen angepasst.
Das Problem hab ich dann über boolsche Variablen gelöst die im Catchblock dann entsprechend auf True gesetzt wird und in einer anderen Klasse dann abgefragt wird... Musste so um zwei Ecken gelöst werden. Was anderes viel mir aber nicht ein und ich streite auch nicht ab, dass es elegantere Lösungen gibt. Aber es läuft und das reicht mir erstmal. ;)

Und Danke nochmal für Deine Hilfe.
Gruß.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
W junit.Test not accessible? Java Basics - Anfänger-Themen 4
6 Best Practice Feedback zu Service / JUnit Tests Java Basics - Anfänger-Themen 3
M Anfängerfehler - Tests JUnit IntelliJ Java Basics - Anfänger-Themen 24
D Cannot find JUnit.framework Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
A JUnit testing is inkonsistent Java Basics - Anfänger-Themen 12
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
A Test Junit Java Basics - Anfänger-Themen 1
H Junit test Java Basics - Anfänger-Themen 12
P Methoden JUnit 4 - Test Java Basics - Anfänger-Themen 6
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
W JUnit Tests Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
L JUnit tests in java Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
F JUnit - Was ist mit "side effects" gemeint ? Java Basics - Anfänger-Themen 2
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
S Junit Test Java Basics - Anfänger-Themen 2
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
L Junit Tests Java Basics - Anfänger-Themen 10
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
V JUnit Klassen Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
Z JUnit Exception Java Basics - Anfänger-Themen 2
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
M Ist die Hamcrest Bibliothek auch schon in Junit 4.11 verfügbar? Java Basics - Anfänger-Themen 1
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
M Reihenfolge von Testmethoden in JUnit beeinflussen Java Basics - Anfänger-Themen 2
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
T JUnit test failed Java Basics - Anfänger-Themen 3
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
T Junit in Eclipse Java Basics - Anfänger-Themen 1
P JUnit bedeutungen Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
S JUnit assertEquals funktioniert nichgt wie es sollte :( Java Basics - Anfänger-Themen 7
V Frage zu JUnit Tests Java Basics - Anfänger-Themen 3
B JUnit für JFileChooser Java Basics - Anfänger-Themen 6
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
S File vergleich - Junit Java Basics - Anfänger-Themen 6
T JUnit Java Basics - Anfänger-Themen 18
G Junit Java Basics - Anfänger-Themen 4
X JUnit testing Java Basics - Anfänger-Themen 7
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
B JUnit - Mini-Test Java Basics - Anfänger-Themen 9
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
T Junit --Exception testen Java Basics - Anfänger-Themen 15
A JUnit Tests in Jar-Archiv packen Java Basics - Anfänger-Themen 2
G Erste Schritte JUNIT Regressionstests automatisieren Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
M JUnit - nur Failures loggen? Java Basics - Anfänger-Themen 2
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
R String Replace für JUnit Java Basics - Anfänger-Themen 19
T JUNIT Nullpointerexception Java Basics - Anfänger-Themen 3
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
S [JUnit] Print Results while running Java Basics - Anfänger-Themen 6
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5
T Junit Tests Java Basics - Anfänger-Themen 7
I JUnit Datapoints für mehrere Testklassen Java Basics - Anfänger-Themen 4
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
L JUNIT Testing Java Basics - Anfänger-Themen 3
C jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat Java Basics - Anfänger-Themen 3
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben