TestNG Vs JUnit: Fark Nedir?

İçindekiler:

Anonim

Hem Testng hem de Junit, Unit Testing için kullanılan Testing framework'tür. TestNG, JUnit'e benzer. TestNG'yi JUnit'ten daha güçlü kılan birkaç işlev eklenmiştir.

Bu eğitim, esas olarak JUnit ve TestNG'nin özelliklerini analiz etmeye odaklanmıştır. Geliştiricilerin Birim Testi için hangi çerçevenin kullanılması gerektiğine karar vermelerine yardımcı olur. Önce TestNG ve JUnit4 arasındaki benzerlikleri inceleyelim.

TestNG, JUnit ve NUnit'ten esinlenen bir test çerçevesidir.

JUnit ve TestNG tarafından desteklenen özellikleri gösteren tablo.

JUnit4 ve TestNG Özellik karşılaştırması

Hem TestNG hem de JUnit4, bir veya iki özellik dışında benzer görünüyor. Hızla karar vermek için ikisi arasında bir karşılaştırma yapalım, hangi teknolojinin Birim Testi için daha uygun olduğuna. Aşağıdaki tablo, her ikisi tarafından desteklenen özellikleri vurgular:

Ek açıklamalar

Hem JUnit hem de TestNG ek açıklamalar kullanır ve neredeyse tüm ek açıklamalar benzer görünür.

TestNG, @BeforeMethod, @ AfterMethod, JUnit4'te @Before, @ After'a benzer.

Hem TestNG hem de Junit4, zaman aşımı için @Test (zaman aşımı = 1000) kullanır.Daha fazla ayrıntı için aşağıdaki tabloyu kontrol edin-

SN Açıklama TestNG JUnit 4
1 Test notu @Ölçek @Ölçek
2 Geçerli sınıfta ilk test yöntemi çağrılmadan önce yürütülür @Dersten önce @Dersten önce
3 Geçerli sınıftaki tüm test yöntemlerinden sonra yürütür @Dersten sonra @Dersten sonra
4 Her test yönteminden önce yürütülür @Evleneceksen @Önce
5 Her test yönteminden sonra yürütülür @AfterMethod @Sonra
6 bir testi yok saymak için ek açıklama @Test (etkinleştir = yanlış) @aldırmamak
7 istisna notu @Test (beklenenExceptions = ArithmeticException.class) @Test (beklenen = ArithmeticException.class)
8 zaman aşımı @Test (zaman aşımı = 1000) @Test (zaman aşımı = 1000)
9 Süitteki tüm testlerden önce yürütülür @Evleneceksen yok
10 Süitteki tüm testlerden sonra yürütülür @Kafadergisi yok
11 Bir test çalıştırılmadan önce yürütülür @Evleneceksen yok
12 Bir test çalıştırıldıktan sonra yürütülür @FterTest yok
13 Bu gruplardan herhangi birine ait olan ilk test yöntemi çağrılmadan önce çalıştırılır. @Evleneceksen yok
14 buradaki gruplardan herhangi birine ait olan son test yönteminden sonra çalıştırın @AfterGroups yok

Suite Testi

Paketler, birden çok testi birlikte yürütmek için kullanılır. Paketler hem TestNG hem de JUnit4 kullanılarak oluşturulabilir. Bununla birlikte, testlerin yürütülmesi için çok farklı bir yöntem kullandığından, testler TestNG'de daha güçlüdür. Aşağıda verilen kod parçacığını kullanarak anlayalım:

JUnit4'ü kullanma

Aşağıdaki sınıf, JUnit4 ile çalışırken süit kullanımını açıklar:

paket guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})public class JunitTest {// Bu sınıf boş kalır, yalnızca yukarıdaki ek açıklamalar için tutucu olarak kullanılır}

TestNG'yi kullanma

TestNG, tüm testleri tek bir yerde toplamak için xml kullanır. Xml'nin altında, TestNG ile çalışırken paketin kullanımı açıklanmaktadır:

Testi Yoksay

Her ikisini de kullanarak bir testi atlayabiliriz. Aşağıda verilen kod örneğini kullanarak görelim:

JUnit4'ü kullanma

Aşağıdaki kod parçası, JUnit4 ile çalışırken @ignore ek açıklamasının kullanımını açıklar:

@Aldırmamakgenel void yöntemi1 (){System.out.println ("@Ignore kullanıldığında, bu yürütme yok sayılır");}

TestNG'yi kullanma

Aşağıdaki kod parçacığı, TestNG ile çalışırken @Test (enabled = false) ek açıklamasının kullanımını açıklar:

@Test (etkin = yanlış)public void TestWithException (){System.out.println ("Yöntem henüz hazır olmadığı için göz ardı edilmelidir");}

İstisna Testi

İstisna testleri hem TestNG hem de JUnit4'te mevcuttur. Testten hangi istisnanın atıldığını kontrol etmek için kullanılır?

JUnit4'ü kullanma

Aşağıdaki kod parçacığı, JUnit4 ile çalışırken istisna testinin kullanımını açıklamaktadır:

@Test (beklenen = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

TestNG'yi kullanma

Aşağıdaki kod parçacığı, TestNG ile çalışırken istisna testinin kullanımını açıklamaktadır:

@Test (beklenenExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Zaman aşımı

Bu özellik hem TestNg hem de JUnit4'te uygulanır. Zaman aşımı, belirtilen süreden (milisaniye cinsinden) daha uzun süren bir testi sonlandırmak için kullanılır.

JUnit4'ü kullanma

Aşağıdaki kod parçacığı, JUnit4 ile çalışırken zaman aşımı testinin kullanımını açıklamaktadır:

@Test (zaman aşımı = 1000)genel void yöntemi1 (){while (doğru);}

TestNG'yi kullanma

Aşağıdaki kod parçacığı, TestNG ile çalışırken zaman aşımı testinin kullanımını açıklamaktadır:

@Test (timeOut = 1000)genel void yöntemi1 (){while (doğru);}

Parametreli Test

JUnit, Parametreli test olarak bilinen test etmek için daha kolay ve okunabilir bir yaklaşım sağlar. Hem TestNG hem de JUnit parametreleştirilmiş testi destekler ancak parametre değerini tanımlama şekillerinde farklılık gösterir. Bunu tek tek görelim.

JUnit4'ü kullanma

"@RunWith" ve "@Parameter" ek açıklamaları, birim testi için parametre değeri sağlamak için kullanılır. @Parameters ek açıklaması List [] döndürmelidir. Bu parametre sınıf yapıcısına argüman olarak aktarılacaktır.

@RunWith (değer = Parametreli.class)public class JunitTest {privateint numarası;public JunitTest6 (int numarası){this.number = sayı;}@Parametrelerpublic static Koleksiyon  verileri (){Nesne [] [] veri = yeni Nesne [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (veri);}@Ölçekpublic void parameterTest (){System.out.println ("Parametreli Sayı: + sayı);}}

TestNG'yi kullanma

TestNG'de, test için bir parametre sağlamak için XML dosyası veya "@DataProvider" kullanılır.

Burada yöntemde belirtilen @Parameters ek açıklaması, test için bir parametreye ihtiyaç duyar. Parametre olarak kullanılan veriler, TestNG'nin XML yapılandırma dosyalarında sağlanacaktır. Bunu yaparak tek bir Test Senaryosunu farklı veri kümeleriyle yeniden kullanabilir ve farklı sonuçlar elde edebiliriz.

public class Test1 {@Ölçek@Parameters (değer = "sayı")public void parameterTest (int numarası){System.out.println ("Parametreli Sayı: + sayı);}}

Yukarıdaki sınıf için kullanılacak aşağıdaki xml dosyasına bakın:


Özet:

JUnit4 ve TestNG karşılaştırmasını detaylı olarak gördük. Parametreli test ve bağımlılık testi dışında ikisinin de benzer olduğunu gördük. Kısaca şunu söyleyebiliriz, esneklik ve gereksinime dayanarak bunlardan herhangi birini Birim Testi için seçebiliriz.