TestNG vs JUnit – Aralarındaki Fark
Arasındaki Temel Fark TestNG ve JUnit
- TestNG bir Javatabanlı çerçeve, JUnit JAVA için açık kaynaklı bir Birim Test Çerçevesidir.
- karşılaştırılması TestNG Vs JUnit, TestNG ek açıklamaların kullanımı ve anlaşılması daha kolaydır JUnit.
- TestNG paralel testler oluşturmamıza olanak sağlarken, JUnit paralel testlerin çalıştırılmasını desteklemez.
- In TestNG, Test durumları birlikte gruplandırılabilir. JUnit, Testleri bir arada gruplamak mümkün değildir.

Nedir? TestNG?
TestNG NG'nin "Yeni Nesil" anlamına geldiği bir otomasyon test çerçevesidir. TestNG esinlenmiştir JUnit (@) ek açıklamalarını kullanır. TestNG dezavantajların üstesinden gelir JUnit ve yapmak için tasarlanmıştır uçtan uca test kolay.
kullanma TestNG, uygun bir rapor oluşturabilir ve kaç test senaryosunun geçildiğini, başarısız olduğunu ve atlandığını kolayca öğrenebilirsiniz. Başarısız olan test senaryolarını ayrı ayrı yürütebilirsiniz.
Junit nedir?
JUnit açık kaynaklı bir Birimdir Test yapmak JAVA'nın çerçevesi. Şunun için faydalıdır: Java Geliştiricilerin tekrarlanabilir testler yazması ve çalıştırması. Erich Gamma ve Kent Beck başlangıçta bunu geliştirdiler. xUnit mimarisinin bir örneğidir. Adından da anlaşılacağı üzere şu amaçla kullanılmaktadır: Birim Testi küçük bir kod parçasından oluşur.
Test odaklı metodolojiyi izleyen geliştiriciler, herhangi bir koddan önce birim testini yazmalı ve yürütmelidir.
Kodla işiniz bittiğinde tüm testleri yapmalısınız ve başarılı olmalıdır. Her kod eklendiğinde, tüm test senaryolarını yeniden yürütmeniz ve hiçbir şeyin bozulmadığından emin olmanız gerekir.
Arasındaki farklar JUnit ve TestNG
Her ikisi de TestNG ve JUnit4, bir veya iki özellik dışında benzer görünüyor. Birim Testi için hangi teknolojinin daha uygun olduğuna hızlı bir şekilde karar vermek için ikisi arasında bir karşılaştırma yapalım. Aşağıdaki tabloda her ikisinin de desteklediği özellikler vurgulanmaktadır:
Açıklamalar
Her ikisi de JUnit ve TestNG ek açıklamalar kullanır ve neredeyse tüm ek açıklamalar benzer görünür.
TestNG @Before ,@After'a benzer şekilde @BeforeMethod ,@AfterMethod'u kullanır JUnit4.
Her ikisi de TestNG ve Junit4 zaman aşımı için @Test(timeout = 1000) kullanır. Daha fazla ayrıntı için aşağıdaki tabloya bakın-
SN | Açıklama | TestNG | JUnit 4 |
---|---|---|---|
1 | Test açıklaması | @Ö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ülür | @Dersten sonra | @Dersten sonra |
4 | Her test yönteminden önce yürütülür | @BeforeMethod | @Önce |
5 | Her test yönteminden sonra yürütülür | @AfterMethod | @Sonrasında |
6 | bir testi yok saymak için ek açıklama | @Test(etkin=yanlış) | @görmezden gelmek |
7 | istisna için ek açıklama | @Test(expectedExceptions = ArithmeticException.class) | @Test(beklenen = ArithmeticException.class) |
8 | zaman aşımı | @Test(zaman aşımı = 1000) | @Test(zaman aşımı = 1000) |
9 | Paketteki tüm testlerden önce yürütülür | @BeforeSuite | n/a |
10 | Paketteki tüm testlerden sonra yürütülür | @AfterSuite | n/a |
11 | Test çalıştırılmadan önce yürütülür | @ÖnceTest | n/a |
12 | Bir test çalıştırmasından sonra yürütülür | @SonraTest | n/a |
13 | Bu gruplardan herhangi birine ait olan ilk test yöntemi çağrılmadan önce yürütülür | @BeforeGroups | n/a |
14 | buradaki gruplardan herhangi birine ait olan son test yönteminden sonra çalıştırın | @AfterGroups | n/a |
Paket Testi
Paketler birden fazla testi birlikte yürütmek için kullanılır. Her ikisi de kullanılarak süitler oluşturulabilir TestNG ve JUnit4. Ancak süitler daha güçlüdür TestNG çünkü testlerin yürütülmesi için çok farklı bir yöntem kullanıyor. Aşağıda verilen kod pasajını kullanarak anlayalım:
kullanma JUnit4
Aşağıdaki sınıf, aşağıdakilerle çalışırken paketin kullanımını açıklamaktadır: 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 }
kullanma TestNG
TestNG tüm testleri tek bir yerde toplamak için xml'i kullanır. Aşağıda xml ile çalışırken paketin kullanımı açıklanmaktadır. 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>
Testi Yoksay
Her ikisini de kullanarak bir testi atlayabiliriz. Aşağıda verilen kod örneğini kullanarak görelim:
kullanma JUnit4
Aşağıdaki kod pasajı, çalışırken @ignore ek açıklamasının kullanımını açıklamaktadır. JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
kullanma TestNG
Aşağıdaki kod parçacığı, çalışırken @Test(enabled=false) ek açıklamasının kullanımını açıklamaktadır. TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
İstisna Testi
İstisna testi her ikisinde de mevcuttur TestNG ve JUnit4. Testten hangi istisnanın atıldığını kontrol etmek için kullanılır.
kullanma JUnit4
Aşağıdaki kod parçacığı, çalışırken istisna testinin kullanımını açıklamaktadır. JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
kullanma TestNG
Aşağıdaki kod parçacığı, çalışırken istisna testinin kullanımını açıklamaktadır. TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Zaman Aşımı
Bu özellik hem TestNg'de hem de JUnit4.Zaman aşımı, belirtilen süreden (milisaniye cinsinden) daha uzun süren bir testi sonlandırmak için kullanılır.
kullanma JUnit4
Aşağıdaki kod parçacığı, çalışırken zaman aşımı testinin kullanımını açıklamaktadır. JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
kullanma TestNG
Aşağıdaki kod parçacığı, çalışırken zaman aşımı testinin kullanımını açıklamaktadır. TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Parametreli Test
JUnit Parametreli test olarak bilinen teste daha kolay ve okunabilir bir yaklaşım sağlar. İkisi birden TestNG ve JUnit parametreli testi destekler ancak parametre değerini tanımlama biçimleri farklılık gösterir. Bunu tek tek görelim.
kullanma JUnit4
Birim testi için parametre değerini sağlamak amacıyla “@RunWith” ve “@Parameter” ek açıklamaları kullanılır. @Parameters ek açıklamasının List[] döndürmesi gerekir. Bu parametre sınıf yapıcısına argüman olarak iletilecektir.
@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); } }
kullanma TestNG
In TestNG, XML dosyası veya “@DataProvider” test için bir parametre sağlamak amacıyla kullanılır.
Burada yöntemde bildirilen @Parameters ek açıklaması, test için bir parametreye ihtiyaç duyar. Parametre olarak kullanılan veriler TestNG'nin XML yapılandırma dosyaları. Bunu yaparak tek bir dosyayı yeniden kullanabiliriz. Test Durumu farklı veri kümeleriyle farklı sonuçlar elde edebiliriz.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Yukarıdaki sınıf için kullanılacak aşağıdaki xml dosyasına bakın:
<!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>
ÖZET
Gördük JUnit4 ve TestNG karşılaştırma ayrıntıları. Ayrıca her ikisinin de parametreli test ve bağımlılık testi dışında benzer olduğunu gördük. Kısacası, esneklik ve gereksinime göre Birim Testi için bunlardan herhangi birini seçebiliriz diyebiliriz.