5.1 @ParameterizedTest anotasi

Kadhangkala sampeyan mung pengin nelpon tes kaping pirang-pirang kanthi paramèter sing beda: nilai sing beda, parameter input sing beda, jeneng pangguna sing beda. JUnit duwe tujuan kanggo nggawe urip luwih gampang, mula ing kasus iki ana tes parameter.

Kanggo nggunakake tes parameterized, sampeyan kudu nambah siji liyane dependensi menyang pom.xml:

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

Banjur kita bisa nimbang conto:

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

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

Saben cara tes bakal diarani kaping 3, lan saben-saben diarani, parameter liyane bakal diterusake. Nilai disetel nggunakake anotasi liyane - @ValueSource . Nanging luwih akeh sing kudu dicritakake babagan iki.

5.2 @ValueSource anotasi

Anotasi @ValueSource apik banget kanggo nggarap primitif lan literal. Cukup dhaptar nilai parameter sing dipisahake karo koma lan tes bakal diarani sapisan kanggo saben nilai.

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

Nanging ana uga minus - anotasi iki ora ndhukung null, dadi sampeyan kudu nggunakake crutch khusus - @NullSource . Katon kaya iki:

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

5.3 @EnumSource anotasi

Ana uga anotasi khusus @EnumSource , sing ngliwati kabeh nilai Enum tartamtu menyang metode kasebut. Aplikasi kasebut katon kaya iki:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

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

5.4 @MethodSource anotasi

Nanging carane kanggo pass obyek minangka paramèter? Utamané yen padha duwe algoritma construction Komplek. Kanggo nindakake iki, sampeyan mung bisa nemtokake cara helper khusus sing bakal ngasilake dhaptar (Stream) saka nilai kasebut.

Tuladha:

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

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

Tes Parameter kanthi Argumen Multiple

Mesthi, sampeyan wis kepingin weruh apa sing kudu ditindakake yen sampeyan pengin ngliwati sawetara paramèter menyang metode kasebut. Ana anotasi @CSVSource sing keren banget kanggo iki . Iki ngidini sampeyan ndhaptar nilai paramèter metode sing dipisahake kanthi koma.

Tuladha:

@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
}