Java Academy · Pelajaran

Ujian Berparameter dengan @CsvSource dan @MethodSource

Jalankan ujian yang sama dengan pelbagai set input menggunakan @ParameterizedTest, @CsvSource dan @MethodSource.

Pelajaran 1 daripada 413 langkah

Ujian Berparameter dengan @CsvSource dan @MethodSource ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Mengapa Ujian Berparameter?

Menjalankan logik ujian yang sama dengan pelbagai set masukan mendedahkan kes pinggiran tanpa menyalin kaedah ujian. JUnit 5 menyokong ujian berparameter secara asli dengan @ParameterizedTest.

@ValueSource: Ujian Satu Nilai Ringkas

@ValueSource menyediakan satu parameter bagi jenis tertentu. Ujian dijalankan sekali untuk setiap nilai.

@ParameterizedTest
@ValueSource(strings = {"", "  ", "\t"})
void blank_strings_are_rejected(String input) {
    assertThrows(IllegalArgumentException.class, () -> validator.validate(input));
}

@CsvSource: Pelbagai Parameter Sebaris

@CsvSource menyediakan baris nilai yang dipisahkan dengan koma. Setiap baris ialah satu panggilan ujian. Gunakan tanda petik tunggal untuk melindungi koma dalam nilai rentetan.

@ParameterizedTest
@CsvSource({
    "Alice, 30, true",
    "Bob,   17, false",
    "Carol, 0,  false"
})
void test_adult_check(String name, int age, boolean expectedAdult) {
    User user = new User(name, age);
    assertEquals(expectedAdult, user.isAdult());
}

@CsvSource dengan delimiterString

Gunakan delimiterString untuk pembatas yang terdiri daripada berbilang aksara atau apabila data Anda mengandungi koma. Gunakan nullValues untuk memetakan rentetan penanda kepada null.

@ParameterizedTest
@CsvSource(value = {
    "Alice | 30 | ADMIN",
    "Bob   | 25 | USER"
}, delimiterString = "|")
void test_roles(String name, int age, String role) { ... }

@CsvFileSource: Fail Data Luaran

Muatkan data ujian daripada fail CSV dalam laluan kelas. Ini berguna untuk set data besar yang akan memenuhi kod ujian.

@ParameterizedTest
@CsvFileSource(resources = "/test-data/users.csv", numLinesToSkip = 1)
void test_from_file(String name, int age, boolean expected) {
    assertEquals(expected, service.isEligible(name, age));
}

@MethodSource: Parameter Kompleks

@MethodSource memanggil kaedah kilang statik yang mengembalikan Stream<Arguments>. Setiap Arguments.of() ialah satu panggilan ujian. Gunakannya untuk objek kompleks.

@ParameterizedTest
@MethodSource("provideOrders")
void test_total_calculation(Order order, BigDecimal expected) {
    assertEquals(expected, orderService.calculateTotal(order));
}
static Stream<Arguments> provideOrders() {
    return Stream.of(
        Arguments.of(new Order(List.of(item(10), item(20))), BigDecimal.valueOf(30)),
        Arguments.of(new Order(List.of()),                   BigDecimal.ZERO)
    );
}

@EnumSource: Menguji Semua Nilai Enumerasi

@EnumSource menjalankan ujian sekali untuk setiap pemalar enumerasi. Gunakan mode dan names untuk menyertakan atau mengecualikan nilai tertentu.

@ParameterizedTest
@EnumSource(value = UserStatus.class, mode = EnumSource.Mode.EXCLUDE, names = "DELETED")
void test_active_statuses(UserStatus status) {
    assertTrue(notificationService.shouldNotify(status));
}

@NullAndEmptySource

Bentuk ringkas untuk menguji masukan null dan rentetan kosong. Gabungkannya dengan @ValueSource menggunakan @NullSource + @EmptySource atau @NullAndEmptySource yang digabungkan.

@ParameterizedTest
@NullAndEmptySource
void null_and_empty_are_invalid(String input) {
    assertFalse(validator.isValid(input));
}

Nama Paparan Tersuai

Gunakan name dalam @ParameterizedTest untuk memformat nama paparan ujian. Pemegang tempat: {index}, {0}, {1}, {arguments}.

@ParameterizedTest(name = "age={1} should be adult={2}")
@CsvSource({"Alice, 30, true", "Bob, 17, false"})
void test_adult(String name, int age, boolean expected) { ... }

Menggabungkan Sumber dengan @ArgumentsSource

Laksanakan ArgumentsProvider untuk penjanaan argumen yang sepenuhnya tersuai — data dinamik daripada pangkalan data, fail atau API.

public class UserArgumentsProvider implements ArgumentsProvider {
    public Stream<? extends Arguments> provideArguments(ExtensionContext ctx) {
        return Stream.of(
            Arguments.of(new User("Alice", 30)),
            Arguments.of(new User("Bob", 17))
        );
    }
}
@ParameterizedTest
@ArgumentsSource(UserArgumentsProvider.class)
void test_user(User user) { ... }

Ujian Berparameter untuk Nilai Sempadan

Uji keadaan sempadan secara sistematik: min-1, min, maks, maks+1. Ujian berparameter menjadikan liputan sempadan mudah dibaca dan diselenggara.

@ParameterizedTest
@CsvSource({"0, false", "1, true", "100, true", "101, false"})
void test_range_boundaries(int value, boolean expected) {
    assertEquals(expected, validator.isInRange(value, 1, 100));
}

Semakan Pantas

Apakah jenis yang dikembalikan oleh @MethodSource yang menyediakan argumen bagi setiap panggilan ujian?

Rumusan

Gunakan @CsvSource untuk data jadual sebaris, @MethodSource untuk objek kompleks, @EnumSource untuk semua nilai enumerasi dan @NullAndEmptySource untuk kes pinggiran null/kosong. Nama tersuai dengan name= meningkatkan kebolehbacaan ujian.

Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Ujian Berparameter dengan @CsvSource dan @MethodSource” percuma?

Ya — teks penuh “Ujian Berparameter dengan @CsvSource dan @MethodSource” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Ujian Berparameter dengan @CsvSource dan @MethodSource”?

Jalankan ujian yang sama dengan pelbagai set input menggunakan @ParameterizedTest, @CsvSource dan @MethodSource. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Ujian Berparameter dengan @CsvSource dan @MethodSource” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Ujian Berparameter dengan @CsvSource dan @MethodSource
  2. Mockito Lanjutan: Penangkap Argumen dan Spy
  3. Slaid Ujian Spring Boot: @WebMvcTest dan @DataJpaTest
  4. Testcontainers: Ujian Integrasi Pangkalan Data Sebenar
← Kembali ke Java Academy