JUnit adalah kerangka kerja pengujian unit sumber terbuka pihak ketiga. Proyek ini dimulai oleh Kent Beck dan Erich Gamma pada akhir tahun 1995. Proyek ini dengan cepat menarik minat komunitas pengembang yang secara khusus menangani pengembangan berbasis pengujian. JUnit awalnya diperkenalkan ke Smalltalk, tetapi kemudian di-porting ke Java, yang dengan cepat mengambil ini sebagai standar pengujian unit de-facto. Popularitas JUnit tumbuh sedemikian rupa sehingga, untuk memenuhi kebutuhan banyak bahasa kontemporer lainnya seperti C#, Perl, Python, PHP, Ruby, Visual Basic, C++, dan sebagainya, kerangka kerja xUnit generik dikembangkan di mana huruf 'x' diganti dengan huruf pertama bahasa tersebut, seperti JUnit untuk Java, RUnit untuk Ruby, dan sebagainya. Artikel ini memberikan ikhtisar kerangka kerja ini seperti yang digunakan oleh standar de-facto dari pengujian unit Java.
Ringkasan Pengujian
Pengujian adalah fase penting dalam siklus hidup pengembangan aplikasi. Tujuan utama dari pengujian adalah untuk mengevaluasi program berdasarkan spesifikasi yang dibutuhkan. Targetnya adalah untuk membuat kasus uji tertentu yang memunculkan kesalahan, kesenjangan, setiap perbedaan atau hasil yang tidak terduga, sebanyak mungkin. Konsep sederhana ini memiliki beberapa proses rumit yang terkait dengannya. Tapi, secara singkat, itu dilakukan pada tiga tingkat. Saat pengujian dilakukan pada tingkat komponen yang sangat terperinci atau individual, hal itu disebut Pengujian Unit; ketika digabungkan untuk memeriksa antarmuka antar komponen terhadap desain perangkat lunak, ini disebut Pengujian Integrasi; dan akhirnya, ketika sistem yang lengkap terintegrasi dan pengujian dilakukan untuk memverifikasi bahwa sistem secara keseluruhan memenuhi persyaratan yang ditentukan, ini disebut Pengujian Sistem .
Pengujian Unit
Singkatnya, melakukan tes unit adalah cara untuk memeriksa perilaku unit kode yang berbeda. Di Java, satuan kode dapat berarti metode atau kelas atau bahkan modul, sesuai dengan konteksnya. Jika itu adalah metode, misalnya, fokus pengujiannya adalah mengevaluasi referensi objek yang tepat yang diizinkan untuk memanggil metode, jenis parameter dan nilai yang dapat diterima, rentang nilai primitif, jenis dan nilai yang dikembalikan, dan seterusnya. Idenya adalah untuk memanggang metode tersebut sehingga dapat dibuat cukup kuat untuk menangani masalahnya dengan anggun dan membuang hal-hal yang berada di luar cakupannya selain memenuhi kontraknya.
Oleh karena itu, pengujian unit membentuk blok bangunan dasar dari setiap evaluasi program. Faktanya, setiap programmer melakukan semacam pengujian unit saat seseorang menulis kode untuk memeriksa hasil kode dengan beberapa data/kasus dummy. Pengujian unit dengan demikian merupakan status formal yang diberikan kepada kumpulan tes yang terisolasi itu. Sangatlah penting bahwa sebuah kode melewati berbagai tahapan pengujian yang ketat. Pengujian unit, selain pentingnya, juga sangat umum. Orang-orang seperti Kent Beck dan Erich Gamma berpikir untuk membuat kerangka kerja untuk itu sehingga pemrogram mendapatkan lingkungan yang terstruktur dan dapat mengotomatiskan banyak tugas ini. Lagi pula, inilah gunanya kerangka kerja. Biasanya, ini menyediakan struktur program yang koheren yang dapat digunakan kembali dan dibagikan di seluruh aplikasi. Seorang programmer dapat memasukkannya ke dalam aplikasi yang ada dan memperluasnya sesuai dengan kebutuhan spesifiknya.
Contoh Singkat
Kode pengujian unit sederhana untuk memeriksa metode tunggal dalam Suhu class tanpa menggunakan framework JUnit adalah sebagai berikut:
package org.mano.unittest.examples; public class Circle { double area(double radius) { returnMath.PI* radius * radius; } }
Sekarang, mari kita tulis kode untuk menguji unit area metode.
package org.mano.unittest.examples; public class CircleTest { public int errCounter= 0; public void testCircleArea() { Circle circle = new Circle(); double area = circle.area(12); if (area < 452 && area > 453) { throw new IllegalStateException("Wrong calculation!: " + area); } } public static void main(String[] args) { TestCircle test = new TestCircle(); try { test.testCircleArea(); } catch (Throwable e) { test.errCounter++; e.printStackTrace(); } if (test.errCounter> 0) { throw new IllegalStateException("There were " + test.errCounter+ " error(s)"); } } }
Ini adalah contoh yang belum sempurna, tetapi memberi Anda gambaran tentang bagaimana pengujian unit dapat dilakukan tanpa menggunakan kerangka kerja apa pun.
Kerangka Pengujian JUnit
Menggunakan kerangka kerja JUnit untuk pengujian unit memiliki beberapa keuntungan. Ini menyediakan banyak anotasi yang memudahkan untuk menulis dan menjalankan kode pengujian di Java:
- Terutama, ini memisahkan perhatian pengujian unit dari kode proyek yang sebenarnya dengan memungkinkan seseorang untuk membuat instance kelas pengujian dan pemuat kelas untuk setiap pengujian unit. Ini "kebal" kode yang ada dari efek samping pengujian yang tidak perlu.
- Anotasi yang disediakan oleh JUnit—seperti @Before, @After, @BeforeClass, @AfterClass —memiliki metode untuk inisialisasi sumber daya dan reklamasi sumber daya.
- Ada berbagai macam metode penegasan untuk memverifikasi hasil pengujian.
- Selama bertahun-tahun, JUnit menjadi sangat populer sehingga banyak alat Java, seperti Semut dan Maven; dan IDE populer, seperti Eclipse , NetBeans , IntelliJ IDEA , dan sejenisnya, dilengkapi dengan integrasi bawaan JUnit.
Untuk menggunakan Kerangka Uji JUnit dalam proyek Java, seseorang harus menambahkan file JAR JUnit ke dalam jalur kelas proyek. Ini secara eksplisit diperlukan jika IDE tidak terintegrasi dengan perpustakaan JUnit. Prosesnya sederhana. Unduh file JAR dan tambahkan ke jalur kelas proyek.
Berikut adalah beberapa tautan penting ke kerangka kerja JUnit.
- Situs resmi JUnit
- API Java JUnit
- Panduan pengguna JUnit
- Kode sumber JUnit di GitHub
Tidak seperti JUnit 4 dan pendahulunya, JUnit 5 membawa beberapa perubahan signifikan. Terlepas dari banyak fitur baru yang ditambahkan&mdah;seperti dukungan lambda, anotasi baru, dan injeksi parameter metode pengujian—arsitektur inti mendapat beberapa modifikasi signifikan. JUnit 5 sekarang merupakan arsitektur komposit dari tiga modul berbeda:JUnit Jupiter, JUnit Vintage, dan JUnit Platform. Pengembang kasus uji, bagaimanapun, tidak perlu repot dengan seluk-beluk perubahan. Perubahan terutama berarti dukungan alat yang lebih baik, konsistensi, dan API yang lebih bersih. Yang terpenting, ini sangat kompatibel dengan JUnit 4. Jadi, jangan khawatir juga. Lihat panduan pengguna JUnit 5 untuk detail selengkapnya.
Contoh Singkat
Berikut adalah contoh yang sangat sederhana untuk melihat sekilas bagaimana pengujian unit dapat dilakukan dengan kerangka kerja JUnit. Kami menggunakan Karyawan class untuk unit test dan buat class test untuk memberikan gambaran tentang cara kerjanya. Contohnya belum sempurna sejauh menulis program 'Hello World'. Kasus uji dunia nyata, atau bahkan contoh uji unit yang layak, membutuhkan jumlah kode yang baik. Mungkin akan kami coba di artikel lain.
package org.mano.unittest.examples; public class Employee { private final String name; private final double basicPay; public Employee(String name, double basicPay) { this.name=name; this.basicPay=basicPay; } public String getName() { return name; } public double getBasicPay() { return basicPay; } } package org.mano.unittest.examples; import org.junit.Test; import static org.junit.Assert.*; public class EmployeeTest { @Test public void constructorInitTest(){ Employee emp=new Employee("Odin", 2300); assertEquals("Odin", emp.getName()); assertEquals(2300, emp.getBasicPay(), 0.001); } } package org.mano.unittest.examples; public class EmployeeTestMain { public static void main(String[] args){ EmployeeTest et=new EmployeeTest(); et.constructorInitTest(); } }
Perhatikan bahwa kelas Karyawan tidak dapat diubah dengan hanya dua bidang yang ditetapkan oleh konstruktor. Karena hanya metode konstruktor yang layak untuk diuji, kami akan mengujinya saja.
Kelas pengujian bernama EmployeeTest sesuai konvensi. Anotasi @Test memungkinkan JUnit untuk menetapkan metode sebagai metode pengujian. Ada berbagai metode penegasan di Assert kelas. Di sini, kami hanya menggunakan assertEquals .
Ada banyak cara untuk menjalankan tes yang ditulis dalam JUnit. Biasanya, setelah kasus uji berjalan, ia mencetak ringkasan. Namun, itu mungkin berbeda tergantung pada bagaimana tes dijalankan. Ini dapat berjalan melalui IDE seperti Eclipse atau IntelliJ, atau alat seperti Maven, Gradle, dan sebagainya. Terkadang, satu-satunya informasi yang diterima setelah tes adalah gagal atau lulus.
Kesimpulan
Ada beberapa kerangka kerja lain untuk pengujian unit. JUnit adalah kerangka kerja pengujian unit yang populer di antara Komunitas Java. Pengujian sebagai fase rekayasa sistem memiliki lebih banyak proses yang terlibat dengannya. Pengujian unit hanyalah bagian dari itu dan, yang menarik, banyak pengujian permainan yang dilakukan oleh pengembang dapat disebut sebagai pengujian unit. JUnit, sebagai kerangka pengujian, menambah nilai padanya. Anotasi dan API yang disediakan oleh JUnit mengotomatiskan banyak tugas dan membuat hidup jauh lebih mudah bagi pengembang pengujian unit.