Parameterized testing

Figure 336. Parameterized tests Slide presentation
  • Separate both test parameters and expected values from code.

  • Provide parameter values either by variables or by separate CSV files.

  • Read Parameterized Classes and Tests for details.


Figure 337. CSV parameter testing Slide presentation
Hard-coded
public void testPrimes() {
  Assertions.assertEquals(false, Prime.isPrime(1));
  Assertions.assertEquals(true,  Prime.isPrime(2));
  Assertions.assertEquals(true,  Prime.isPrime(3));
  Assertions.assertEquals(false, Prime.isPrime(4));}
Parameterized
@ParameterizedTest
@CsvSource( textBlock = """
   false, 1
   true,  2
   true,  3
   false, 4""")
public void testPrimes(boolean expected, int primeCandidate) {
  Assertions.assertEquals(expected, Prime.isPrime(primeCandidate));         
}

Figure 338. CSV parameter testing results Slide presentation
mvn test ─ de.hdm_stuttgart.mi.sd1.PrimeTest - 0.098 s
           ├─ ✔ testPrimes(int, boolean)[1] 1, false - 0.035 s
           ├─ ✔ testPrimes(int, boolean)[2] 2, true - 0.001 s
           ├─ ✔ testPrimes(int, boolean)[3] 3, true - 0.001 s
           └─ ✔ testPrimes(int, boolean)[4] 4, false - 0.001 s

Figure 339. CSV parameter file based testing Slide presentation
@ParameterizedTest
@CsvFileSource(resources = "/primes.csv")
public void testPrimesByFile 
  (boolean expected, int primeCandidate, ) {
     Assertions.assertEquals(
        expected
       ,Prime.isPrime(primeCandidate)
     );
}

File test/resources/primes.csv:

false, 1
true,  2
true,  3
false, 4
mvn test ─ de.hdm_stuttgart.mi.sd1.PrimeTest - 0.098 s
           ├─ ✔ testPrimesByFile(int, boolean)[1] false, 1  - 0.031 s
           ├─ ✔ testPrimesByFile(int, boolean)[2] true,  2 - 0.001 s
           ├─ ✔ testPrimesByFile(int, boolean)[3] true,  3 - 0.001 s
           └─ ✔ testPrimesByFile(int, boolean)[4] false, 4 - 0.001 s