Datengetriebene Tests mit JUnit

Mit JUnit lassen sich in Java ausgezeichnet Unit Tests durchführen. Will man größere Testdatenreihen prüfen, kann man das ganze auch sehr einfach formulieren. Dazu muss man aber keine Schleifen oder gar einzelne Tests schreiben. Mit dem Test Runner Parameterized lassen sich ganz einfach datenorientierte Tests schreiben.

Im folgenden Test soll die Berechnung des n-ten Elements der Fibonacci-Folge geprüft werden. Bei der Fibonacci-Folge sind das erste Element 0 und zweite Element 1, alle nachfolgenden Elemente werden durch die Summe der beiden Vorgänger bestimmt.

Die Testklasse sieht wie folgt aus:

@RunWith(Parameterized.class)
public class FibonacciTest {
 
    @Parameter(0)
    public int input;
 
    @Parameter(1)
    public int expected;
 
    @Parameters(name = "{index}: fib({0})={1}")
    public static Collection<Object[]> data() {
        Object[][] data = new Object[][]{{0, 0}, {1, 1}, {2, 1}, {3, 2}, {4, 3}, {5, 5}, {6, 8}};
        return Arrays.asList(data);
    }
 
    @Test
    public void testCompute() {
        int actual = Fibonacci.compute(input);
        assertEquals(expected, actual);
    }
 
}

Der Test Runner Parameterized wird per Annotation an der Klasse notiert. Dieser Test Runner erwartet eine Methode, die mit @Parameters ausgezeichnet ist und die Testdaten zurückgibt. Der Name der Methode ist egal, aber der Rückgabewert muss eine Collection sein mit dem Generic Object[].

Für jeden Index der Collection wird nun eine Instanz der Testklasse erzeugt und die Feldelemente werden in die mit @Parameter annotierten Member injiziert. Der Parameter der Annotation @Parameter nennt den Feldindex aus den aktuellen Testdaten.

Als Clou kann man @Parameter noch einen String mitgeben der die jeweiligen Testdaten identifiziert. In diesem String sind die folgenden Platzhalter erlaubt: {index} → der aktuelle Index der Testdaten, {0} → der erste Testparameter, {1} → der zweite Testparameter usw. Dieser String mit den ersetzten Platzhaltern wird dann im Log der Tests bzw. im Ergebnisfenster einer IDE angezeigt.

Schreibe einen Kommentar

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