[Übung] Ein test-getriebener Rechner in JAVA

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.

GIF zur Erstellung TestKlassen in JAVA und jUnit
GIF zur Erstellung TestKlassen in JAVA und jUnit

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

Anklicken für Lö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]

[collapse]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.