Eine erste Übung zur Erarbeitung von test-getriebener Entwicklung und dem Konzept von Unit-Tests kann dieser einfache Rechner sein.
Die Auszubildenden sollen dadurch Unit-Tests und die Erstellung dieser Kennenlernen.
Voraussetzungen
- Laptop mit Eclipse
- Grundlagen Programmierung
Dauer
2 Stunden
Themen
Testing, TDD, JAVA, UnitTests, jUnit
Ablauf
Zunächst wird gemeinsam erarbeitet, was der Rechnen können soll.
Es entstehen dann in der Klasse „Rechner“ 4 Methoden:
- plus(a, b)
- minus(a, b)
- mal(a, b)
- geteilt(a, b)
Nun soll die Klasse mit noch leeren Methoden angelegt werden.
Anschließend wird die TestKlasse angelegt:
- Rechtsklick auf Rechner.java
- New
- jUnit-Testcase
Dann hier die Daten vervollständigen, nach einem Klick auf „next“ werden alle Methoden (bis auf den Konstruktor) ausgewählt und das ganze bestätigt.

Unterstützung findet sich hier:
https://courses.cs.washington.edu/courses/cse143/11wi/eclipse-tutorial/junit.shtml
Nun werden die ersten Tests für die Methoden geschrieben und der Test wird ausgeführt.
Natürlich schlägt er fehl.
Jetzt werden die Methoden mit Leben gefüllt, um die Tests zu erfüllen.
Wichtig ist noch, dass daran gedacht wird, auch Grenzfälle zu testen (Teilen durch 0, zB).
Musterlösung
Der Code kann hier heruntergeladen werden.
Rechner.java
[cc lang=“java“]
public class Rechner {
public double plus (double a, double b) {
return a + b;
}
public double minus (double a, double b) {
return a – b;
}
public double mal (double a, double b) {
return a * b;
}
public double geteilt (double a, double b) {
if (b == 0) {
throw new IllegalArgumentException(„Division durch 0 ist nicht erlaubt.“);
} else {
return a / b;
}
}
}
[/cc]
RechnerTest.java
[cc lang=“java“]
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class RechnerTest {
Rechner r;
@BeforeEach
void setUp() throws Exception {
r = new Rechner();
}
@Test
void testPlus() {
double inputA = 2;
double inputB = 5;
double expected = 7;
double actual = r.plus(inputA, inputB);
assertEquals(expected, actual);
}
@Test
void testMinus() {
double inputA = 2;
double inputB = 5;
double expected = -3;
double actual = r.minus(inputA, inputB);
assertEquals(expected, actual);
}
@Test
void testMal() {
double inputA = 2;
double inputB = 5;
double expected = 10;
double actual = r.mal(inputA, inputB);
assertEquals(expected, actual);
}
@Test
void testGeteilt() {
double inputA = 6;
double inputB = 3;
double expected = 2;
double actual = r.geteilt(inputA, inputB);
assertEquals(expected, actual);
double inputB2 = 0;
try {
r.geteilt(inputA, inputB2);
} catch(IllegalArgumentException iae) {
assertEquals(IllegalArgumentException.class, iae.getClass());
}
}
}
[/cc]