Junit --Exception testen

tanzverfuehrung

Bekanntes Mitglied
Guten tag, also ich teste grad meine Klasse...und in der Klasse wird eine exception gefangen und eine neue weiter geworfen!
ich weiß nicht wie ich das testen soll, WIe exceptions eigentlich zu testen sind, weiß ich!
doch das Funktioniert nicht oder welche von beiden muss ich überhaupt prüfen???

meine zu testende Klasse:
Java:
public class Function implements IFunction {

	private final ScriptEngine engine;

	public Function(ScriptEngine engine) {
		this.engine = engine;
	}
	/**
	 * Gibt für den übergebenen x Wert ,den errechneten y-Wert zurück.
	 * 
	 * @param x
	 *            übergebene xKoordinate
	 * @return yKoordinate
	 */
	@Override
	public double f(double x) {
		Object y;
		try {
			y = engine.eval("f(" + x + ");");
		}
		catch (ScriptException e) {
			throw new IllegalStateException(e.getMessage());
		}
		return ((Number) y).doubleValue();
	}
}

und der test sieht bis jetzt so aus:
Java:
	/**
	 * Prüft ob eine {@link IllegalStateException} geworfen wird, wenn falsche
	 * Werte übergeben werden.
	 * 
	 * @throws Exception
	 */
	@Test(expected = IllegalStateException.class)
	public void illegalState() throws Exception {
		
		function = math.eval("5x");
		function.f(1);
	}

kann mir jemand helfen????:eek:;(
 
Zuletzt bearbeitet:

tfa

Top Contributor
Du musst deinem zu testenden Objekt eine [c]ScriptEngine[/c] (ein Mock) unterschieben, das beim Aufruf von eval() einfach eine ScriptException wirft. Hierfür würde sich ein Mocking-Framework anbieten.
 

tanzverfuehrung

Bekanntes Mitglied
Du musst deinem zu testenden Objekt eine [c]ScriptEngine[/c] (ein Mock) unterschieben, das beim Aufruf von eval() einfach eine ScriptException wirft. Hierfür würde sich ein Mocking-Framework anbieten.

ja also mit mocken ahbe ich es auch schon versucht!
aber da war nciht ein test bei mir grün!

der test zum Beipiel geht:
Java:
/**
	 * Prüft ob zu der linearen Funktion und dem übergeben x-Wert der richtige y-Wert
	 * errechnet wird.
	 * 
	 * @throws Exception
	 */
	@Test
	public void linearFunction() throws Exception {
		function = math.eval("5*x+1");
		Object result = function.f(-2.0);
		Object y = -9.0;
		assertThat(((Number) result).doubleValue(), is(((Number) y).doubleValue()));
	}
aber ist der falsch oder was???
 

tanzverfuehrung

Bekanntes Mitglied
Du musst deinem zu testenden Objekt eine [c]ScriptEngine[/c] (ein Mock) unterschieben, das beim Aufruf von eval() einfach eine ScriptException wirft. Hierfür würde sich ein Mocking-Framework anbieten.

meinst du so????:shock:
Java:
	/**
	 * Prüft ob eine {@link IllegalStateException} geworfen wird, wenn falsche
	 * Werte übergeben werden.
	 * 
	 * @throws Exception
	 */
	@Test
	public void illegalState() throws Exception {
		//@formatter:off
		context.checking(new Expectations() {{
			oneOf(engine).eval("sf");
				will(returnValue(ScriptException.class));
		}});
		//@formatter:on
		function.f(1);
	}
}

die zeile muss aufjedenfall bleiben oder???
Java:
 @Test(expected = IllegalStateException.class)

oder muss die andere Exception da hin?
Java:
 @Test(expected = ScriptException.class)
 
Zuletzt bearbeitet:

tfa

Top Contributor
Ich seh nicht so recht, wo da gemockt wird.
Mit JMockit würde ich es so machen:
Java:
@Mocked
private ScriptEngine engine;

@Test(expected = IllegalStateException.class))
public void scriptExceptionIsForwardedAsIllegalArgumentException() {
    Function func = new Function(engine);
    new Expectations() {
        {
            engine.eval(anyString);
            result=new IllegalArgumentException();
        }
    };
    func.f(0.0);
}
In diesem einfachen Fall geht es sicher auch ganz gut ohne Mocking-Framework.

Edit: OK, jetzt seh ich auch dein Mocking.
 

tanzverfuehrung

Bekanntes Mitglied
ich habe es nun mal so probiert aber das geht immer noch nicht, im meiner console sagt er mir:
java.lang.Exception: Unexpected exception, expected<java.lang.IllegalStateException> but was<java.lang.AssertionError>

Java:
	/**
	 * Prüft ob eine {@link IllegalStateException} geworfen wird, wenn falsche
	 * Werte übergeben werden.
	 * 
	 * @throws Exception
	 */
	@Test(expected = IllegalStateException.class)
	public void illegalState() throws Exception {
	function =new Function(engine);
	
	//@formatter:off
		context.checking(new Expectations() {{
		engine.eval("abc");
	            result= new ScriptException("");
		}});
		//@formatter:on

	    function.f(0.0);
//		assertThat(function.f(0.0), is(result));;
	}
}
;(;(


und ich habe mocking auch bisschen anders gelernt und habe es noch mal so implementiert und da kommt eine andere fehler meldung, was ja noch kurioser ist!!!

ist doch eigentlich das gleiche oder?

Java:
	/**
	 * Prüft ob eine {@link IllegalStateException} geworfen wird, wenn falsche
	 * Werte übergeben werden.
	 * 
	 * @throws Exception
	 */
	@Test(expected = IllegalStateException.class)
	public void illegalState() throws Exception {
	function =new Function(engine);
	
		//@formatter:off
		context.checking(new Expectations() {{
		oneOf(engine).eval("abc");
				will(returnValue(new ScriptException("")));
		}});
		//@formatter:on

	    function.f(0.0);
//		assertThat(function.f(0.0), is(result));;
	}
}

fehlermeldung:
java.lang.Exception: Unexpected exception, expected<java.lang.IllegalStateException> but was<java.lang.AssertionError>
???:L
 
Zuletzt bearbeitet:

tfa

Top Contributor
Der Code sieht eigentlich gut aus. Wo fliegt denn der AssertionError? Ist das assertThat wirklich auskommentiert? Mach mal Clean und Rebuild.
 

tanzverfuehrung

Bekanntes Mitglied
Da sollte auch ein Stacktrace mit Zeilennummer stehen.

java.lang.Exception: Unexpected exception, expected<java.lang.IllegalStateException> but was<java.lang.AssertionError>
Caused by: java.lang.AssertionError: unexpected invocation: scriptEngine.eval("f(0.0);")
expectations:
expected once, never invoked: scriptEngine.eval("abc"); returns <javax.script.ScriptException: >
what happened before this: nothing!
 

tfa

Top Contributor
Steht doch da. Die Expectations erwarten, dass [c]eval("abc")[/c] aufgerufen wird. Du rufst aber [c]eval("f(0.0);")[/c] auf.
 

tanzverfuehrung

Bekanntes Mitglied
Steht doch da. Die Expectations erwarten, dass [c]eval("abc")[/c] aufgerufen wird. Du rufst aber [c]eval("f(0.0);")[/c] auf.

Java:
@Test(expected = IllegalStateException.class)
	public void illegalState() throws Exception {
		function = new Function(engine);

		//@formatter:off
		context.checking(new Expectations() {{
		oneOf(engine).eval("f(0.0);");
				will(returnValue(new ScriptException("")));
		}});
		//@formatter:on
		 Object result = function.f(0.0);
	((Number)result).doubleValue();
	}
}
so geht es nciht, da kommt nun eine classCastException

und auserdem will ich ja gucken ob die exception weiter geworfen wird,deswegen muss ich ja ein Fehler einbauen oder nicht?????????:L
 

tfa

Top Contributor
da kommt nun eine classCastException
Aha. Dann musst du die beheben.

und auserdem will ich ja gucken ob die exception weiter geworfen wird,deswegen muss ich ja ein Fehler einbauen oder nicht??????
Das tust du ja, indem du die ScriptException erzeugst. Allerdings weiß ich nicht, ob das korrekt mit dem will(returnValue(..)) funktioniert, den die Exception muss ja geworfen werden und nicht mit return zurück geliefert. Ich weiß nicht, was für ein Mocker du benutzt, mit JMockit geht es so wie oben beschrieben.

Edit: Ich seh grad, in meinem Beispiel ist ein Fehler. In Zeile 10 muss natürlich ScriptException stehen.
 
Zuletzt bearbeitet:

tanzverfuehrung

Bekanntes Mitglied
Aha. Dann musst du die beheben.


Das tust du ja, indem du die ScriptException erzeugst. Allerdings weiß ich nicht, ob das korrekt mit dem will(returnValue(..)) funktioniert, den die Exception muss ja geworfen werden und nicht mit return zurück geliefert. Ich weiß nicht, was für ein Mocker du benutzt, mit JMockit geht es so wie oben beschrieben.

Edit: Ich seh grad, in meinem Beispiel ist ein Fehler. In Zeile 10 muss natürlich ScriptException stehen.

Ich benutze JMock und ich kenne das nur nach dem schema ...
bei deinem code beispiel hat mich das result so verwirrt!?muss ich damit nicht irgendwas machen?
oder so???


Java:
@Mocked
private ScriptEngine engine;
 
@Test(expected = IllegalStateException.class))
public void scriptExceptionIsForwardedAsIllegalArgumentException() {
    Function func = new Function(engine);
    new Expectations() {
        {
            engine.eval(anyString);
            result=new ScriptException();
        }
    };
    func.f(0.0);
}
 

tfa

Top Contributor
Mit [c]result=...[/c] legt man fest, was die gemockte Methode als ergebnis zurückliefert ([c]returns(...)[/c] gibt's auch, aber das funktioniert etwas anders). Wenn das Objekt, das man result zuweist, ein Throwable ist, wirft die Methode dieses Throwable. Genau das willst du erreichen. Finde heraus, wie das mit JMock funktioniert, und der Test sollte klappen. Das returnValue gibt die Exception wahrscheinlich nur als Ergebnis zurück - was auch die ClassCastException erklären würde.
 

fastjack

Top Contributor
Mit JMock sieht das irgendwie facked aus... Hier mal EasyMock

Java:
private ScriptEngine engine = createMock(ScriptEngine.class);
 
@Test(expected=IllegalStateException.class))
public void scriptExceptionIsForwardedAsIllegalArgumentException() {
    Function func = new Function(engine);
    expect(engine.eval(isA(String.class))).andThrows(new ScriptException("tattaa ! exception ist daa!"));
    replay(engine); // oder replayAll wenn Dein Test EasyMockSupported, verify() und reset() ins tearDown
    func.f(0.0);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23
Z JUnit Exception Java Basics - Anfänger-Themen 2
C jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat Java Basics - Anfänger-Themen 3
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
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
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
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

Ähnliche Java Themen

Neue Themen


Oben