jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat

Chew

Neues Mitglied
Hallo beisammen,

mir ist gerade zum ersten Mal der Fall passiert, dass ich Code testen möchte, der seine Exception selbst handelt. D.h. ich weiß von außen gar nicht, ob etwas schief gegangen ist oder nicht. Ein Beispiel:

Java:
public void init(String filename) {
  try {
			URL url = getClass().getResource(filename);

			XMLInputSource in = new XMLInputSource(url); // wirft IOException
		} catch (IOException e) {
			(Fehlerbehandlung)
		}
}

Ich kann die IOException nicht weitergeben, weil die Methode eine überschriebene Superklassen-Methode ist. In meinem jUnit-Test kann ich nun zwar die Methode aufrufen und auf der Console sehen, dass bei falschen Dateinamen die IOException geworfen wird. Mein Test läuft aber immer fröhlich durch, dabei soll er anzeigen, dass es ein Problem gab.

Gibt es eine Möglichkeit zu erkennen, dass mein Code einen Fehler geworfen und selbst behandelt hat?

Vielen Dank und viele Grüße,

Chew
 
M

maki

Gast
Wenn der Code die Exception schluckt, kannst du nie wissen ob eine aufgetreten ist.

Du testest ja von aussen eine blackbox, vielleicht kannst du ja ein mock nutzen, aber nicht jeder Code lässt sich eben testen, dafür gibt es Vorraussetzungen.
 

kay73

Bekanntes Mitglied
Ich kann die IOException nicht weitergeben, weil die Methode eine überschriebene Superklassen-Methode ist.
Doch das geht mit AspectJ und das auch ohne den Code zu ändern; ist nur mit etwas mehr (Konfigurations-)Aufwand verbunden. Man kann die Ausführung des Exception Handlers abfangen und z. B. die Exception werfen bevor oder nachdem sie behandelt wird. Im Anhang ist ein Maven-Projekt, das das demonstriert.
TODO's:
  • Das Code-Weaving nur im Test-Scope durchführen.
  • Den Aspekt in den Test-Codezweig verlagern.
  • Den Aspekt mittels
    Code:
    within()
    genauer auf den Testfall abstellen.
Wenn der Quellcode der zu testenden Klasse im gleichen Build ist wie die Testklasse kannst Du das wie in der pom.xml machen. Wenn der Code in einem separaten Build läuft und Du nur ein JAR mit der Klasse hast, die die Exception behandelt, musst Du das maven-aspectj-Plugin so konfigurieren, das es JAR-Files weaved. (Kniffliger wird's, wenn die signiert sind...)

Der JUnit-Test soll im Idealfall wahrscheinlich so aussehen:
Java:
package myapp;

import java.io.IOException;
import org.junit.Test;

public class AppTest {

    @Test(expected=IOException.class)
    public void test() {
        new App().init(null);
    }
}
Die App weicht nicht sonderlich von Deinem Quellcode ab.
Java:
package myapp;

import java.io.IOException;
import java.net.URL;

class XMLInputSource {

    public XMLInputSource(final URL url) throws IOException {
        throw new IOException("BOOM!");
    }
}

public class App {

    public void init(String filename) {
        try {
//            URL url = getClass().getResource(filename);
            XMLInputSource in = new XMLInputSource(null); // wirft IOException
        } catch (IOException e) {
//            (Fehlerbehandlung)
        }
    }
}

Ein sehr allgemeiner Test-Aspekt, der Exceptions weiterwirft:
Java:
package myapp.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AppTestAspect {

    @Pointcut("handler(*) && args(throwable)")
    public void throwablePointcut(Throwable throwable) {
    }

    @Before("throwablePointcut(throwable)")
    public void onThrowablePointcutPointcut(Throwable throwable) throws Throwable {
        System.out.println("handler runing and throwing " + throwable.getMessage());
        throw throwable;
    }
}
 

Anhänge

  • app.zip
    3,4 KB · Aufrufe: 2
Zuletzt bearbeitet:

mvitz

Top Contributor
Die eigentliche Frage ist hier doch, wieso möchtest du irgendwas von der Exception mitbekommen von außen.

Da die Methode den Fehler ja selber behandelt, müsste es doch einfach ein erwartetes Ergebnis für den Fehlerfall geben, z.B. die Rückgabe eines Defaultwertes. Also gibst du einfach Daten hinein, die den Fehler verursachen und testest anschließend ob der Defaultwert gesetzt ist (also die Fehlerbehandlung funktioniert hat).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
T JUnit Suite frage Java Basics - Anfänger-Themen 6
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
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
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben