.
package de.hsrm.cs.swt.dreieck;
public class Dreieck
{
public enum Status
{
gleichseitig,
gleichschenklig,
ungleichseitig
}
public static void main(String[] args) throws Exception
{
Dreieck.checkDreieck(args);
}
public static Status checkDreieck(String[] args) throws Exception
{
...diverse Parameterchecks - werfen allesamt eine Exception...
if (...Bedingungen für "nicht ungleichseitig"...)
{
if (...Bedingungen für "gleichseitig"...)
{
return Status.gleichseitig;
}
return Status.gleichschenklig;
}
return Status.ungleichseitig;
}
}
Und so sieht der Test aus:package de.hsrm.cs.swt.dreieck.test;
import static org.junit.Assert.*;
import junit.framework.Assert;
import org.junit.Test;
import de.hsrm.cs.swt.dreieck.Dreieck;
public class DreieckTest
{
@Test
public void testUngleichseitig() throws Exception
{
Dreieck.Status status = Dreieck.checkDreieck(new String[] { "2", "2", "2" });
Assert.assertEquals(Dreieck.Status.ungleichseitig, status);
}
@Test
public void testStringEingabe() throws Exception
{
try
{
Dreieck.checkDreieck(new String[] { "a", "2", "3" });
Assert.fail("Exception fehlt!");
}
catch (Exception ex)
{
// OK so!
}
}
}
Wichtig ist hierbei, dass man jede Methode, die einen Test darstellt, mit der Annotation "@org.junit.Test
" versieht.
Ansonsten gilt für Testmethoden nur, dass sie keine Rückgabe und keine Parameter haben dürfen. Falls eine der zu testenden Methoden eine Exception
werfen könnte, kann man eine "throws Exception
"-Deklaration an die Methode anhängen (denn eine Exception im Test selbst ist ja ein
fehlgeschlagener Test - JUnit kümmert sich um die Behandlung dieses Fehlers).testUngleichseitig
ist bewußt "falsch" gebaut, denn bei diesen Eingabeparametern sollte
nicht "ungleichseitig" als Status kommen. Dadurch erhalten wir einen fehlschlagenden Test und ich kann dies in den folgenden Screenshot zeigen.
Es verdeutlicht außerdem ein reales Problem: der Anwendungscode ist korrekt, aber der Unittest-Code enthält einen Bug ;-).