Paraméterezett tesztek

A JUnit4 lehetővé teszi, hogy tesztjeinket paraméterezzük a @Parameterized.Parameters annotáció segítségével. Így az egyes teszt metódusok többször is végrehajtódnak az előzőleg meghatározott paraméterek listáján végighaladva.

Példaként nézzük meg a Prime Factors Kata bejegyzésben bemutatott teszteket. A Kata végén kilenc tesztesetet tartalmazott a PrimeFactorsTest osztály:

    @Test
    public void one() throws Exception {
        assertEquals(list(), generate(1));
    }

    @Test
    public void two() throws Exception {
        assertEquals(list(2), generate(2));
    }

    ...

    @Test
    public void nine() throws Exception {
        assertEquals(list(3, 3), generate(9));
    }

Jól látszik, hogy mind a kilenc teszteset ugyanazt csinálja, csak más-más értékeket használva. A tesztet paraméterezve mindössze egyetlen tesztmetódusra van szükségünk:

@RunWith(Parameterized.class)
public class PrimeFactorsTest {

    private final int number;
    private final List<Integer> expectedPrimes;

    private static List<Integer> list(Integer... integers) {
        return Arrays.asList(integers);
    }

    @Parameters
    public static Collection<Object[]> parameters() {
        return Arrays.asList(new Object[][] {
                { list(), 1 },
                { list(2), 2 },
                { list(3), 3 },
                { list(2, 2), 4 },
                { list(5), 5 },
                { list(2, 3), 6 },
                { list(7), 7 },
                { list(2, 2, 2), 8 },
                { list(3, 3), 9 }
        });
    }

    public PrimeFactorsTest(List<Integer> expectedPrimes, int number) {
        this.expectedPrimes = expectedPrimes;
        this.number = number;
    }

    @Test
    public void primeFactorsOfAnyNumber() throws Exception {
        assertEquals(expectedPrimes, generate(number));
    }
}

Ahhoz, hogy paramétereket használhassunk, először is el kell látni a tesztosztályt egy @RunWith(Parameterized.class) annotációval (1. sor). Kell készítenünk egy olyan konstruktort, amelyik megkapja a változó paramétereket (26. sor). Ezután egy statikus metódust kell készítenünk, és a @Parameterized.Parameters annotációval ellátnunk (12. sor). Ez a metódus fogja egy Collection formájában visszaadni a paramétereket. A teszt futtatása során ezeket a paramétereket kapja meg a konstruktor egymás után.

Tehát a tesztet lefuttatva kilencszer fog végrehajtódni a primeFactorsOfAnyNumber() teszteset különböző értékekkel, és ugyanazt az eredményt kapjuk, mint a Prime Factors Kata végére elkészült kilenc tesztesetet tartalmazó teszt lefuttatása esetén.

Nincs hozzászólás Írta:
Kategória: Praktikák
Címkék , ,

Szólj hozzá!