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.
TestNG vs JUnit
TestNG vs JUnit

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:

Perbedaan antara JUnit dan TestNG

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.