Pengujian Berparameter dengan @CsvSource dan @MethodSource
Jalankan pengujian yang sama dengan berbagai kumpulan input menggunakan @ParameterizedTest, @CsvSource, dan @MethodSource.
Pengujian Berparameter dengan @CsvSource dan @MethodSource adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Mengapa Pengujian Berparameter?
Menjalankan logika pengujian yang sama dengan beberapa kumpulan masukan mengungkap kasus tepi tanpa menyalin-tempel metode pengujian. JUnit 5 mendukung pengujian berparameter secara bawaan melalui @ParameterizedTest.
@ValueSource: Pengujian Nilai Tunggal Sederhana
@ValueSource menyediakan satu parameter dari tipe tertentu. Pengujian dijalankan sekali untuk setiap nilai.
@ParameterizedTest
@ValueSource(strings = {"", " ", "\t"})
void blank_strings_are_rejected(String input) {
assertThrows(IllegalArgumentException.class, () -> validator.validate(input));
}@CsvSource: Beberapa Parameter Secara Inline
@CsvSource menyediakan baris nilai yang dipisahkan koma. Setiap baris merupakan satu pemanggilan pengujian. Gunakan tanda kutip tunggal untuk mengapit koma dalam nilai string.
@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 pemisah yang terdiri dari beberapa karakter atau saat data Anda berisi koma. Gunakan nullValues untuk memetakan string penanda ke null.
@ParameterizedTest
@CsvSource(value = {
"Alice | 30 | ADMIN",
"Bob | 25 | USER"
}, delimiterString = "|")
void test_roles(String name, int age, String role) { ... }@CsvFileSource: Berkas Data Eksternal
Muat data pengujian dari berkas CSV di jalur kelas. Berguna untuk kumpulan data besar yang akan membuat kode pengujian menjadi berantakan.
@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 metode pabrik statis yang mengembalikan Stream<Arguments>. Setiap Arguments.of() merupakan satu pemanggilan pengujian. Gunakan 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 Enum
@EnumSource menjalankan pengujian sekali untuk setiap konstanta enum. 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
Singkatan untuk menguji masukan berupa null dan string kosong. Gabungkan dengan @ValueSource menggunakan @NullSource + @EmptySource atau gunakan gabungan @NullAndEmptySource.
@ParameterizedTest
@NullAndEmptySource
void null_and_empty_are_invalid(String input) {
assertFalse(validator.isValid(input));
}Nama Tampilan Kustom
Gunakan name dalam @ParameterizedTest untuk memformat nama tampilan pengujian. Placeholder: {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
Implementasikan ArgumentsProvider untuk pembuatan argumen yang sepenuhnya kustom—data dinamis dari basis data, berkas, 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) { ... }Pengujian Berparameter untuk Nilai Batas
Uji kondisi batas secara sistematis: min-1, min, max, max+1. Pengujian berparameter membuat cakupan kondisi batas mudah dibaca dan dipelihara.
@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));
}Pemeriksaan Singkat
Tipe pengembalian apa dari @MethodSource yang menyediakan argumen untuk setiap pemanggilan pengujian?
Rangkuman
Gunakan @CsvSource untuk data tabular inline, @MethodSource untuk objek kompleks, @EnumSource untuk semua nilai enum, dan @NullAndEmptySource untuk kasus tepi null/kosong. Nama kustom dengan name= meningkatkan keterbacaan pengujian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengujian Berparameter dengan @CsvSource dan @MethodSource” gratis?
Ya — teks lengkap “Pengujian Berparameter dengan @CsvSource dan @MethodSource” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengujian Berparameter dengan @CsvSource dan @MethodSource”?
Jalankan pengujian yang sama dengan berbagai kumpulan input menggunakan @ParameterizedTest, @CsvSource, dan @MethodSource. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Pengujian Berparameter dengan @CsvSource dan @MethodSource” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengujian Berparameter dengan @CsvSource dan @MethodSource
- Mockito Tingkat Lanjut: Penangkap Argumen dan Spy
- Irisan Pengujian Spring Boot: @WebMvcTest dan @DataJpaTest
- Testcontainers: Pengujian Integrasi Basis Data Nyata