Junit - Tipe dari Parameterized Test
Pendahuluan
Pendahuluan mengenai Parameterized Test bisa dilihat di sini.
Kesimpulan dari menggunakan Parameterized Test diatas adalah :
Dengan Parameterized Test , maka :
- Lebih mudah untuk mengkatogorisasikan jenis kasus di Unit test nya.
- Lebih mudah mencari test method yang berkaitan.
- Code nya lebih pendek dan lebih jelas.
Dalam kenyataannya, banyak kondisi yang perlu kita tambahkan parameter untuk unit test nyat tersebut, misalnya :
- Kita ingin menambahkan satu parameter saja dengan tipe yang sama.
- Kita ingin menambahkan banyak parameter dengan tipe yang sama.
- Kita ingin menambahkan banyak parameter dengan tipe yang berbeda.
- Kita ingin menambahkan banyak parameter dengan tipe Enum.
Contohnya ?
1. Kita ingin menambahkan satu parameter saja dengan tipe yang sama.
Coba kita lihat code ini :
|
|
Didalamnya kita ingin mengetes untuk inputannya saja yang hanya terdiri dari satu parameter bertipe String yaitu variable input1
Oleh karenanya kita coba untuk membuat Unit Testnya sbb :
|
|
Didalamnya kita menggunakan :
- NullAndEmptySource , untuk parameter Null dan Empty String untuk tipe parameter String input. Hasilnya adalah false.
- @ValueSource(strings = {“A”,“B”}) , @ValueSource(strings = {“C”,“D”} , untuk keperluan parameterized test untuk satu parameter saja. Hasilnya adalah true untuk “A” dan “B”, dan false untuk selainnya.
Di code diatas kita mendefinisikan tipe dari parameter yang kita passing, yaitu bertipe strings
Tipe struktur data yang disupport memakai @ValueSource ini antara lain :
- shorts
- bytes
- ints
- longs
- floats
- doubles
- chars
- booleans
- strings
- classes
2. Kita ingin menambahkan banyak parameter dengan tipe yang sama.
Kembali lagi ke code yang diatas :
|
|
Kita sebenarnya bisa membuat Unit Test menjadi lebih singkat, dengan membuat parameter untuk input1, dan parameter untuk hasilnya juga, berupa true/false.
Misalnya :
|
|
Coba lihat, code kita jadi lebih pendek.
Dengan mengkombinasikan parameter untuk input1 dan hasilnya, maka dengan mudah kita menambah kombinasi parameter lainnya.
Dari code diatas, artinya :
- untuk input “null”, maka ekspektasi hasil dari method nya adalah false.
- untuk input "", maka ekspektasi hasil dari method nya adalah false.
- untuk input “A”, maka ekspektasi hasil dari method nya adalah true.
- untuk input “B”, maka ekspektasi hasil dari method nya adalah true.
- untuk input “C”, maka ekspektasi hasil dari method nya adalah false.
- dst
Didalamnya kita menggunakan :
- CsvSource , untuk membuat banyak parameter dengan tipe yang sama, atau tipe yang bisa otomatis di convert oleh librarynya.
- dengan CsvSource , maka kita bisa me-listing semua kombinasi antara inputan dengan hasil nya.
3. Kita ingin menambahkan banyak parameter saja dengan tipe yang berbeda.
Kembali lagi ke code yang diatas :
|
|
Selain dengan @ValueSource, dan @CsvSource diatas,kita juga bisa membuat parameternya dalam bentuk method.
Kita memakai anotasi @MethodSource.
Contohnya sbb :
|
|
4. Kita ingin menambahkan banyak parameter saja dengan tipe Enum.
Sebenarnya ini mirip dengan contoh 1 diatas
- Kita ingin menambahkan satu parameter saja dengan tipe yang sama.
Tetapi kita ingin membungkusnya dalam objek nya Java berupa Enumeration.
Misalnya kita buat sebuah Enum untuk contoh inputannya, sbb :
|
|
dan untuk Unit Test nya :
|
|
Maka secara otomatis semua nilai dari Enum diatas akan diiterasi dan dilakukan test terhadap method testInputEnumSource_Success .