JUnit test von Exceptions

Tron36

Ensign
Registriert
Jan. 2011
Beiträge
212
Hallo Leute,
ich will folgenden Java Code mit JUnit Testen:

Code:
public class MyClass extends Exception {
	private static final long serialVersionUID = 1L;

	public MyClass (String message) {
		super(message);
	}

}


Wie man sieht wirft es ja eine Exception, mit der übergebenen message. Wie kann man dies überprüfen?


Lg Tron36
 
Was du da hast definiert eine Exception, aber wirft keine. Was meinst du genau?

Wenn du eine Methode auf das Werfen deiner MyClass-Exception testen willst, dann kannst du das mit der Annotation @Test(expected=MyClass.class) tun.
 
ich wollte die Klasse Testen, auch wenn diese "klein" ist. Dafür müsste man ja, bei der Referenzierung, eine message übergeben.

lg Tron36
Ergänzung ()

carom schrieb:
Wenn du eine Methode auf das Werfen deiner MyClass-Exception testen willst, dann kannst du das mit der Annotation @Test(expected=MyClass.class) tun.

Genau das wollte ich überprüfen und ob bz. was in message steht.
 
Ohne jetzt JUnit zu kennen (Ich kenne Nunit von .NET/C#, das afaik ja rechtlich ähnlich ist, weil Junit Vorbild war), solltest es doch mit

Assert.IsTrue(exception.Message.Equals("deine message"));

oder ähnlich gehen. Sollte aber keine Rocket Science sein und relativ leicht zu googlen sein.
 
Einfach String Vergleiche machen und angeben was erwartet wird und dies prüfen mit was zurückgegeben wird.
Kannst dir auch andere Test Logik überlegen, z.B.: http://www.javamex.com/tutorials/exceptions/ExceptionHierarchy.png

Klassen die von Exception erben, dürfen keine Errors werfen die in der Hierarchie über "Exception" stehen. Bin mir nicht sicher ob da nicht schon der Compiler meckert...
 
Zuletzt bearbeitet von einem Moderator:
Hi,
hab mir folgendes zusammengebastelt:

Code:
package de.fraunhofer.fokus.psw.test;

import static org.junit.Assert.*;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import de.berlin.senbwf.egov.SchuedaException;

public class SchuedaExceptionTest {
	
	@Rule public ExpectedException exception = ExpectedException.none();
	
	@Test
	public void testSchuedaException() {
		exception.expect(Exception.class);		
		exception.expectMessage(containsString("Test"));

		new SchuedaException("Test");
		
	}
}

bekomme jedoch folgende fehlermeldung, mit der ich nicht sehr viel anfangen kann:

java.lang.AssertionError: Expected test to throw (exception with message a string containing "Test" and an instance of java.lang.Exception)

könnt ihr mir helfen.

lg tron36
 
Der Test erwartet, dass Du eine Methode aufrufst, die diese Exception wirft (Keyword throw). Das ist das Grundproblem. Du instanzierst ein Objekt der Excpetionklasse, aber Sie wird nicht geworfen.

Evtl. solltest Du Dich mit dem Thema Exception handling auch noch etwas befassen.

Probier mal statt new SchuedaException("Test"); -> throw new SchuedaException("Test"); evtl. reicht das ja schon. Aber evtl. gibts Java Experten hier der da mehr zu sagen können, mir ist die Syntax von Junit anscheinend doch nicht geläufig. =)
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
3
Aufrufe
1.230
R
D
Antworten
10
Aufrufe
1.221
Dexter1997
D
Antworten
6
Aufrufe
971
Zurück
Oben