Testing / JUnit6 Interview Questions
What is @ParameterizedClass in JUnit 6 and how does it differ from @ParameterizedTest?
@ParameterizedClass is a JUnit 6 (and late JUnit 5) annotation that parameterises an entire test class rather than a single test method. Instead of repeating @ParameterizedTest on every method, the whole class is instantiated multiple times with different argument sets.
// @ParameterizedTest: repeats one method class OrderTest { @ParameterizedTest @CsvSource({"PENDING,false", "SHIPPED,true", "CANCELLED,true"}) void isFinalStatus(Status status, boolean expected) { assertEquals(expected, status.isFinal()); } // Problem: if 10 methods need the same data source, you repeat // the annotation 10 times } // @ParameterizedClass: repeats the WHOLE class (JUnit 6) @ParameterizedClass @CsvSource({"PENDING,false", "SHIPPED,true", "CANCELLED,true"}) class StatusTest { @Parameter(0) Status status; // field injection @Parameter(1) boolean expectedFinal; @Test void isFinalStatus() { assertEquals(expectedFinal, status.isFinal()); } @Test void descriptionIsNotEmpty() { assertFalse(status.description().isBlank()); } @Test void statusToStringContainsName() { assertTrue(status.toString().contains(status.name())); } // All 3 tests run for each of the 3 CSV rows: // 9 total test executions instead of 3x@ParameterizedTest } // Display name format in JUnit 6: "status = PENDING, expectedFinal = false" // JUnit 5 style was: "status=PENDING, expectedFinal=false" (no spaces)
More Related questions...