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 Koleksiyonverileri (){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.
- Sonraki