5.1 @ParameterizedTest annotation

Minsan gusto mo lang tawagan ang pagsubok nang maraming beses na may iba't ibang mga parameter: iba't ibang mga halaga, iba't ibang mga parameter ng input, iba't ibang mga username. Nilalayon ng JUnit na gawing mas madali ang iyong buhay, kaya para sa kasong ito mayroon itong isang bagay tulad ng mga parameterized na pagsubok.

Upang gumamit ng mga parameterized na pagsubok, kailangan mong magdagdag ng isa pang dependency sa iyong pom.xml:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

Pagkatapos ay maaari nating isaalang-alang ang isang halimbawa:

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
    //test code
}

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

Ang bawat paraan ng pagsubok ay tatawagin ng 3 beses, at sa bawat oras na ito ay tatawagin, isa pang parameter ang ipapasa dito. Ang mga halaga ay itinakda gamit ang isa pang anotasyon - @ValueSource . Ngunit higit pa ang kailangang sabihin tungkol dito.

5.2 @ValueSource annotation

Ang @ValueSource annotation ay mahusay para sa pagtatrabaho sa mga primitive at literal. Ilista lamang ang mga halaga ng parameter na pinaghihiwalay ng mga kuwit at ang pagsubok ay tatawagin nang isang beses para sa bawat halaga.

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

Ngunit mayroon ding minus - hindi sinusuportahan ng annotation na ito ang null, kaya kakailanganin mong gumamit ng espesyal na saklay para dito - @NullSource . Mukhang ganito:

@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
    assertTrue(argument == null);
}

5.3 @EnumSource annotation

Mayroon ding isang espesyal na anotasyon @EnumSource , na ipinapasa ang lahat ng mga halaga ng isang partikular na Enum sa pamamaraan. Mukhang ganito ang application nito:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
    assertNotNull(d);
}

5.4 @MethodSource annotation

Ngunit paano ipasa ang mga bagay bilang mga parameter? Lalo na kung mayroon silang isang kumplikadong algorithm ng konstruksiyon. Upang gawin ito, maaari kang tumukoy lamang ng isang espesyal na paraan ng katulong na magbabalik ng isang listahan (Stream) ng mga naturang halaga.

Halimbawa:

@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
    assertNotNull(argument);
}

static Stream<String> argsProviderFactory() {
    return Stream.of("one", "two",  "three");
}

Mga Parameterized na Pagsusulit na may Maramihang Argumento

Siyempre, naisip mo na kung ano ang gagawin kung gusto mong ipasa ang ilang mga parameter sa pamamaraan. Mayroong isang napaka-cool na @CSVSource annotation para dito . Pinapayagan ka nitong ilista ang mga halaga ng mga parameter ng pamamaraan na pinaghihiwalay lamang ng mga kuwit.

Halimbawa:

@ParameterizedTest
@CsvSource({
    "alex, 30, Programmer, Working",
    "brian, 35, Tester, Working",
	"charles, 40, manager, kicks"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
	//method code
}