5.1 anotasi @ParameterizedTest

Terkadang Anda hanya ingin memanggil pengujian beberapa kali dengan parameter berbeda: nilai berbeda, parameter input berbeda, nama pengguna berbeda. JUnit bertujuan untuk membuat hidup Anda lebih mudah, jadi untuk kasus ini ada yang namanya tes parameter.

Untuk menggunakan pengujian berparameter, Anda perlu menambahkan satu dependensi lagi ke pom.xml:

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

Kemudian kita dapat mempertimbangkan sebuah contoh:

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

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

Setiap metode pengujian akan dipanggil 3 kali, dan setiap kali dipanggil, parameter lain akan diteruskan ke sana. Nilai ditetapkan menggunakan anotasi lain - @ValueSource . Tetapi lebih banyak yang perlu dikatakan tentang itu.

5.2 anotasi @ValueSource

Anotasi @ValueSource sangat bagus untuk bekerja dengan primitif dan literal. Cukup cantumkan nilai parameter yang dipisahkan dengan koma dan pengujian akan dipanggil sekali untuk setiap nilai.

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

Tetapi ada juga minusnya - anotasi ini tidak mendukung nol, jadi Anda perlu menggunakan kruk khusus untuk itu - @NullSource . Ini terlihat seperti ini:

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

5.3 anotasi @EnumSource

Ada juga anotasi khusus @EnumSource , yang meneruskan semua nilai Enum tertentu ke metode. Aplikasinya terlihat seperti ini:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

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

5.4 anotasi @MethodSource

Tapi bagaimana cara melewatkan objek sebagai parameter? Apalagi jika mereka memiliki algoritma konstruksi yang kompleks. Untuk melakukan ini, Anda cukup menentukan metode pembantu khusus yang akan mengembalikan daftar (Stream) dari nilai tersebut.

Contoh:

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

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

Tes Parameter dengan Banyak Argumen

Tentu saja, Anda sudah bertanya-tanya apa yang harus dilakukan jika Anda ingin meneruskan beberapa parameter ke metode tersebut. Ada anotasi @CSVSource yang sangat keren untuk ini . Ini memungkinkan Anda untuk membuat daftar nilai parameter metode yang hanya dipisahkan dengan koma.

Contoh:

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