5.1 @ParameterizedTest anotasi

Kadangkala anda hanya mahu memanggil ujian beberapa kali dengan parameter berbeza: nilai berbeza, parameter input berbeza, nama pengguna berbeza. JUnit bertujuan untuk menjadikan hidup anda lebih mudah, jadi untuk kes ini ia mempunyai perkara seperti ujian parameter.

Untuk menggunakan ujian berparameter, anda perlu menambah satu lagi pergantungan kepada anda pom.xml:

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

Kemudian kita boleh mempertimbangkan 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 kaedah ujian akan dipanggil 3 kali, dan setiap kali ia dipanggil, parameter lain akan dihantar kepadanya. Nilai ditetapkan menggunakan anotasi lain - @ValueSource . Tetapi lebih banyak perlu dikatakan mengenainya.

5.2 anotasi @ValueSource

Anotasi @ValueSource bagus untuk bekerja dengan primitif dan literal. Hanya senaraikan nilai parameter yang dipisahkan dengan koma dan ujian akan dipanggil sekali untuk setiap nilai.

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

Tetapi terdapat juga tolak - anotasi ini tidak menyokong null, jadi anda perlu menggunakan tongkat khas untuknya - @NullSource . Ia kelihatan seperti ini:

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

5.3 anotasi @EnumSource

Terdapat juga anotasi khas @EnumSource , yang menghantar semua nilai Enum tertentu kepada kaedah. Aplikasinya kelihatan seperti ini:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

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

5.4 anotasi @MethodSource

Tetapi bagaimana untuk lulus objek sebagai parameter? Terutama jika mereka mempunyai algoritma pembinaan yang kompleks. Untuk melakukan ini, anda hanya boleh menentukan kaedah pembantu khas yang akan mengembalikan senarai (Strim) nilai tersebut.

Contoh:

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

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

Ujian Berparameter dengan Pelbagai Argumen

Sudah tentu, anda sudah tertanya-tanya apa yang perlu dilakukan jika anda ingin menghantar beberapa parameter kepada kaedah tersebut. Terdapat anotasi @CSVSource yang sangat menarik untuk ini . Ia membolehkan anda menyenaraikan nilai parameter kaedah 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
}