JUNit Test IOException

tanzverfuehrung

Bekanntes Mitglied
also ich habe einem MEthode die zu testen ist

@Override

Invoked when any exception is thrown by user IoHandler implementation or by MINA. If cause is an instance of IOException, MINA will close the connection automatically.

Overrides: exceptionCaught(...) in IoHandlerAdapter
Parameters:
session
cause
Throws:
IOException
Java:
@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws IOException {
		deviceLog.log(ERROR, ""+cause.getLocalizedMessage(), cause);
	}


meine JUnit test dazu
Java:
/**
	 * Prüft, ob eine erhaltenen {@link Exception} geworfen wird.
	 * 
	 * @throws Exception
	 */
	@Test(expected = IOException.class)
	public void testExceptionCaught() throws Exception {
		handler.exceptionCaught(session, new IOException("error"));
	}


die fehlermeldung:


java.lang.AssertionError: Expected exception: java.io.IOException
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:32)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:110)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


kann mir jemand eventuell weiter helfen, wie ich diese methode am besten teste:bahnhof:
 

faetzminator

Gesperrter Benutzer
Natürlich throwt in diesem Fall [c]exceptionCaught()[/c] keine [c]IOException[/c]. Du musst aber überprüfen, ob diese Exception geloggt wird. Entweder kannst du das irgendwie im Nachhinein machen, oder du mockst [c]deviceLog[/c] und erkennst gleich den Aufruf von [c]log()[/c].
 

turtle

Top Contributor
Das sehe ich wie faetzminator.

Was möchtest Du denn mit Deinem Test "beweisen"? Die Signatur gibt ja schon an, dass exceptionCaught eine IOException werfen kann. Dieses muss nicht getestet werden.

Bleibt deviceLog.log() und dieses kannst Du testen, indem Du eine Mock-Implementierung für deviceLog unterschiebst und verifiziert, dass da der Text drinsteht.
 

tanzverfuehrung

Bekanntes Mitglied
also ich habe den TEst neu implementiert

Java:
@Before
	public void setUp() throws Exception {
		modelManager = context.mock(IMsecModelManager.class);
		session = context.mock(IoSession.class);
		message = context.mock(IStaffMessage.class);
		deviceLog = context.mock(IDeviceLog.class);
		handler = new MsecIoHandler(modelManager, NULL_DEVICE_LOG);
	}

	@After
	public void tearDown() throws Exception {
		context.assertIsSatisfied();
	}

Java:
/**
	 * Prüft, ob die Log Ausgabe richig ausgegeben wird.
	 * 
	 * @throws Exception
	 */
	@Test
	public void testExceptionCaught() throws Exception {
		final Throwable cause = new Throwable();
		//@formatter:off
			context.checking(new Expectations(){{
				oneOf(deviceLog).log(ERROR, ""+cause.getLocalizedMessage(), cause);	
				}});// @formatter:on
		handler.exceptionCaught(session, cause);
	}

so was mich nun wundert...wenn ich es so habe, schlägt der Test fehl!

java.lang.AssertionError: not all expectations were satisfied
expectations:
expected once, never invoked: iDeviceLog.log(<ERROR>, "null", <java.lang.Throwable>); returns a default value
at org.jmock.lib.AssertionErrorTranslator.translate(AssertionErrorTranslator.java:20)
at org.jmock.Mockery.assertIsSatisfied(Mockery.java:196)
at eu.gemtec.eagle.device.gemtec.msec.core.system.TestMsecServerHandler.tearDown(TestMsecServerHandler.java:74)

wenn ich auf diese Zeile klicke ,komme ich zum
@After
public void tearDown() throws Exception {
context.assertIsSatisfied();
}

, also wenn ich das
context.assertIsSatisified rausnehme funktioniert es!DEr test ist GRÜN!
aber wieso ist dAS so???:bahnhof:
 

tanzverfuehrung

Bekanntes Mitglied
das gleiche Problem habe ich auch in einer anderen TestKlasse

Testen wollte ich diese MEthode
Java:
/**
	 * Überprüft die Positionsangabe der {@link IStaffMessage} auf ihre
	 * Korrektheit. Sind die Angaben der {@link Position#latitude} und/oder
	 * {@link Position#longitude} falsch, wird dies geloggt.
	 * 
	 * @param message
	 *            {@link IStaffMessage}, die die Positionsangabe enthält
	 * @return <code>true</code>, wenn die Postionsange korrekt ist, für
	 *         {@link Position#longitude} zwischen 180 und -180 und für
	 *         {@link Position#latitude} zwischen 90 und -90 <br>
	 *         <code>false</code>, wenn dies nicht der Fall
	 */
	private boolean hasCorrectPosition(IStaffMessage message) {
		Position position = message.getCurrentPos();
		double longitude = position.longitude;
		double latitude = position.latitude;

		if (longitude < -180 || longitude > 180  || longitude == NaN) {
			log(WARNING, "Invalid longitude: >" + longitude + "< in message: "+message);
			return false;
		}

		if (latitude < -90 || latitude > 90 || longitude == NaN) {
			log(WARNING, "Invalid latitude >"+latitude+"< in message: "+message);
			return false;
		}
		return true;
	}


für die Latitude funktioniert es egal ob ich
@After
public void tearDown() throws Exception {
context.assertIsSatisfied();
}
mache oder nicht!

Java:
	/**
	 * Prüft, ob ein Long-Eintrag gemacht wird, wenn die
	 * {@link Position#latitude} einen Wert außerhalb des Intervalls (-90-90)
	 * hat.
	 * 
	 * @throws Exception
	 */
	@Test
	public void testUpdateSystemModelWithIncorrectPositionInfoLatitude() throws Exception {
		final IStaffMessage message = context.mock(IStaffMessage.class);
		final IStaff staff = context.mock(IStaff.class);

		//@formatter:off
		context.checking(new Expectations(){{
			allowing(staff).getId();
				will(returnValue("2"));
			allowing(message).getId();
				will(returnValue("2"));
			allowing(message).getCurrentPos();
				will(returnValue(new Position(12.3, 100)));
			oneOf(deviceLog).log(WARNING, "Invalid latitude >100.0< in message: iStaffMessage");
		}});//@formatter:on
		modelManager.setModel(newHashSet(staff));
		modelManager.updateSystemModel(message);
	}

oder bei der Longitude geht mein test bloß wenn ich
@After
public void tearDown() throws Exception {
context.assertIsSatisfied();
} auskommentiere
Java:
/**
	 * Prüft, ob ein Log-Eintrag gemacht wird, wenn die
	 * {@link Position#longitude} einen Wert außerhalb des Intervalls (-180,180)
	 * hat.
	 * 
	 * @throws Exception
	 */
	@Test
	public void testUpdateSystemModelWithIncorrectPositionInfoLongitude() throws Exception {
		final IStaffMessage message = context.mock(IStaffMessage.class);
		final IStaff staff = context.mock(IStaff.class);

		//@formatter:off
		context.checking(new Expectations(){{
			allowing(staff).getId();
				will(returnValue("2"));
			allowing(message).getId();
				will(returnValue("2"));
			allowing(message).getCurrentPos();
				will(returnValue(new Position(NaN, 12.3)));
				oneOf(deviceLog).log(WARNING, "Invalid longitude >100.0< in message: iStaffMessage");
			oneOf(staff).setCurrentPosition(new Position(NaN, 12.3));
			oneOf(message).getState();
				will(returnValue(IStaff.State.AVAILABLE));
			oneOf(staff).setState(IStaff.State.AVAILABLE);		
		}});//@formatter:on
		modelManager.setModel(newHashSet(staff));
		modelManager.updateSystemModel(message);
	}

WIESO????????
 

tanzverfuehrung

Bekanntes Mitglied
so also dann werde ich wohl mal selber beantworten...

wenn man objekte mockt ist context.assertIsSatisfied(); sehr wichtig und aknn nicht weg gelassen werden!!!!:toll::applaus:

wenn das der grund ist, weshalb der test nicht geht!

haben sie ein fehler!!!im Test oder in der klasse:rtfm:
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W junit.Test not accessible? Java Basics - Anfänger-Themen 4
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 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
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
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
S Junit Test Java Basics - Anfänger-Themen 2
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
T JUnit test failed 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 Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
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
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
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
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
J JUnit Test Java Basics - Anfänger-Themen 2
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
G BlueJ jUnit Test Java Basics - Anfänger-Themen 6
V Test mit JUnit verbinden Java Basics - Anfänger-Themen 3
B JUnit Test Klasse Rational Java Basics - Anfänger-Themen 12
C Unsupported major.minor bei jUnit Test Java Basics - Anfänger-Themen 2
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
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
A JUnit testing is inkonsistent Java Basics - Anfänger-Themen 12
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
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
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
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
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
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
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
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
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 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
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
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
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

Ähnliche Java Themen

Neue Themen


Oben