TestNG vs JUnit – Perbedaan Antara Mereka
Perbedaan Utama antara TestNG dan JUnit
- TestNG adalah Javakerangka berbasis, sementara JUnit adalah Kerangka Pengujian Unit sumber terbuka untuk JAVA.
- Pembandingan TestNG Vs JUnit, TestNG anotasi lebih mudah digunakan dan dipahami daripada JUnit.
- TestNG memungkinkan kita membuat pengujian paralel JUnit tidak mendukung menjalankan tes paralel.
- In TestNG, Kasus uji dapat dikelompokkan bersama, saat berada di JUnit, Mengelompokkan tes bersama-sama tidak dimungkinkan.
Apa itu TestNG?
TestNG adalah kerangka pengujian otomasi di mana NG adalah singkatan dari “Next Generation”. TestNG terinspirasi oleh JUnit yang menggunakan anotasi (@). TestNG mengatasi kelemahan dari JUnit dan dirancang untuk dibuat pengujian ujung ke ujung mudah.
Menggunakan TestNG, Anda dapat membuat laporan yang tepat, dan Anda dapat dengan mudah mengetahui berapa banyak kasus uji yang lulus, gagal, dan dilewati. Anda dapat menjalankan kasus pengujian yang gagal secara terpisah.
Apa itu Junit?
JUnit adalah Unit sumber terbuka pengujian Kerangka kerja untuk JAVA. Ini berguna untuk Java Pengembang menulis dan menjalankan pengujian yang dapat diulang. Erich Gamma dan Kent Beck awalnya mengembangkannya. Ini adalah contoh arsitektur xUnit. Seperti namanya, ini digunakan untuk Pengujian Unit dari sepotong kecil kode.
Pengembang yang mengikuti metodologi berbasis pengujian harus menulis dan menjalankan pengujian unit terlebih dahulu sebelum kode apa pun.
Setelah Anda selesai dengan kode, Anda harus menjalankan semua pengujian, dan kode tersebut akan lulus. Setiap kali kode apa pun ditambahkan, Anda perlu menjalankan kembali semua kasus pengujian dan memastikan tidak ada yang rusak.
Perbedaan antara JUnit dan TestNG
Kedua TestNG dan JUnit4 terlihat serupa, kecuali satu atau dua fitur. Mari kita bandingkan keduanya untuk segera memutuskan, teknologi mana yang lebih disukai untuk Pengujian Unit. Tabel di bawah ini menyoroti fitur-fitur yang didukung oleh keduanya:
Penjelasan
Kedua JUnit dan TestNG menggunakan anotasi dan hampir semua anotasi terlihat serupa.
TestNG menggunakan @BeforeMethod ,@AfterMethod mirip dengan @Before ,@After di JUnit4.
Kedua TestNG dan Junit4 menggunakan @Test(timeout = 1000) untuk batas waktu. Periksa tabel di bawah ini untuk lebih jelasnya-
SN | Description | TestNG | JUnit 4 |
---|---|---|---|
1 | Uji anotasi | @Uji | @Uji |
2 | Dieksekusi sebelum metode pengujian pertama dipanggil di kelas saat ini | @Sebelum kelas | @Sebelum kelas |
3 | Dieksekusi setelah semua metode pengujian di kelas saat ini | @Afterlass | @Afterlass |
4 | Dieksekusi sebelum setiap metode pengujian | @Tokopedia | @Sebelum |
5 | Dieksekusi setelah setiap metode pengujian | @Afterhod | @Setelah |
6 | anotasi untuk mengabaikan tes | @Test(aktifkan=salah) | @mengabaikan |
7 | anotasi untuk pengecualian | @Test(expectedExceptions = ArithmeticException.kelas) | @Test(diharapkan = ArithmeticException.class) |
8 | batas waktu | @Tes(batas waktu = 1000) | @Tes(batas waktu = 1000) |
9 | Dieksekusi sebelum semua pengujian di suite | @Sebelumnya | n / a |
10 | Dieksekusi setelah semua pengujian di suite | @Setelah | n / a |
11 | Dieksekusi sebelum pengujian dijalankan | @Tokopedia | n / a |
12 | Dieksekusi setelah pengujian dijalankan | @Setelah | n / a |
13 | Dieksekusi sebelum metode pengujian pertama yang termasuk dalam salah satu grup ini dipanggil | @Tokopedia | n / a |
14 | dijalankan setelah metode pengujian terakhir milik salah satu grup di sini | @Afterroup | n / a |
Tes Suite
Suite digunakan untuk menjalankan beberapa pengujian secara bersamaan. Suite dapat dibuat menggunakan keduanya TestNG dan JUnit4. Namun, suite lebih kuat TestNG karena menggunakan metode yang sangat berbeda untuk pelaksanaan tes. Mari kita pahami menggunakan cuplikan kode seperti yang diberikan di bawah ini:
Menggunakan JUnit4
Kelas di bawah ini menjelaskan penggunaan suite saat bekerja dengannya JUnit4:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty,it is used only as a holder for the above annotations }
Menggunakan TestNG
TestNG menggunakan xml untuk menggabungkan semua tes di satu tempat. Di bawah xml menjelaskan penggunaan suite saat bekerja dengannya TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Abaikan Tes
Dengan menggunakan keduanya kita dapat melewati tes. Mari kita lihat menggunakan contoh kode seperti yang diberikan di bawah ini:
Menggunakan JUnit4
Cuplikan kode di bawah ini menjelaskan penggunaan anotasi @ignore saat bekerja dengannya JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Menggunakan TestNG
Cuplikan kode di bawah ini menjelaskan penggunaan anotasi @Test(enabled=false) saat bekerja dengannya TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Tes Pengecualian
Pengujian pengecualian tersedia di keduanya TestNG dan JUnit4. Digunakan untuk memeriksa, pengecualian mana yang diberikan dari pengujian?
Menggunakan JUnit4
Cuplikan kode di bawah ini menjelaskan penggunaan pengujian pengecualian saat bekerja dengannya JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Menggunakan TestNG
Cuplikan kode di bawah ini menjelaskan penggunaan pengujian pengecualian saat bekerja dengannya TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
batas waktu
Fitur ini diimplementasikan baik di TestNg dan JUnit4.Timeout digunakan untuk menghentikan pengujian yang memerlukan waktu lebih lama dari waktu yang ditentukan (dalam milidetik).
Menggunakan JUnit4
Cuplikan kode di bawah ini menjelaskan penggunaan tes batas waktu saat bekerja dengannya JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Menggunakan TestNG
Cuplikan kode di bawah ini menjelaskan penggunaan tes batas waktu saat bekerja dengannya TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Uji Parameter
JUnit memberikan pendekatan pengujian yang lebih mudah dan mudah dibaca yang dikenal sebagai pengujian Parameterisasi. Keduanya TestNG dan JUnit mendukung pengujian berparameter tetapi berbeda dalam cara menentukan nilai parameter. Mari kita lihat ini satu per satu.
Menggunakan JUnit4
Anotasi “@RunWith” dan “@Parameter” digunakan untuk memberikan nilai parameter untuk pengujian unit. Anotasi @Parameters harus mengembalikan List[] . Parameter ini akan diteruskan ke konstruktor kelas sebagai argumen.
@RunWith(value = Parameterized.class) public class JunitTest{ privateint number; public JunitTest6(int number) { this.number = number; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } }; returnArrays.asList(data); } @Test public void parameterTest() { System.out.println("Parameterized Number is : " + number); } }
Menggunakan TestNG
In TestNG, file XML atau “@DataProvider” digunakan untuk menyediakan parameter pengujian.
Di sini anotasi @Parameters yang dideklarasikan dalam metode, memerlukan parameter untuk pengujian. Data yang digunakan sebagai parameter akan disediakan TestNGfile konfigurasi XML. Dengan melakukan ini, kita dapat menggunakan kembali satu file Uji Kasus dengan kumpulan data yang berbeda, dan kita bisa mendapatkan hasil yang berbeda.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Lihat file xml di bawah yang akan digunakan untuk kelas di atas:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.guru99.Test1" /> </classes> </test> </suite>
Kesimpulan
Kami melihat JUnit4 dan TestNG perbandingan secara rinci. Kita juga melihat keduanya serupa kecuali pengujian parameter dan pengujian ketergantungan. Singkatnya, berdasarkan fleksibilitas dan kebutuhan, kita dapat memilih salah satu dari keduanya untuk Pengujian Unit.