TestNG vs JUnit - Erinevus nende vahel

Peamine erinevus TestNG ja JUnit

  • TestNG on Java-põhine raamistik, samas JUnit on JAVA avatud lähtekoodiga üksuse testimise raamistik.
  • Võrreldes TestNG Vs JUnit, TestNG märkusi on lihtsam kasutada ja mõista kui JUnit.
  • TestNG võimaldab meil luua paralleelseid teste, samas JUnit ei toeta paralleeltestide käitamist.
  • In TestNG, Testjuhtumeid saab rühmitada, kui see on JUnit, Testide rühmitamine ei ole võimalik.
TestNG vs JUnit
TestNG vs JUnit

Mis on TestNG?

TestNG on automatiseerimise testimise raamistik, milles NG tähistab "järgmist põlvkonda". TestNG on inspireeritud JUnit mis kasutab märkusi (@). TestNG ületab puudused JUnit ja on mõeldud valmistamiseks otsast lõpuni testimine lihtne.

Kasutamine TestNG, saate luua korraliku aruande ja saate hõlpsalt teada, kui palju testjuhtumeid on läbitud, ebaõnnestunud ja vahele jäetud. Ebaõnnestunud testjuhtumeid saate läbi viia eraldi.

Mis on Junit?

JUnit on avatud lähtekoodiga üksus Testimine JAVA raamistik. See on kasulik Java Arendajad kirjutavad ja käitavad korratavaid teste. Algselt arendavad seda Erich Gamma ja Kent Beck. See on xUnit arhitektuuri näide. Nagu nimigi ütleb, kasutatakse seda Üksuse testimine väikesest koodijupist.

Arendajad, kes järgivad testipõhist metoodikat, peavad enne mis tahes koodi kirjutama ja täitma üksuse testi.

Kui olete koodiga lõpetanud, peaksite täitma kõik testid ja see peaks läbima. Iga kord, kui kood lisatakse, peate uuesti käivitama kõik testjuhtumid ja veenduma, et miski pole katki.

Erinevused JUnit ja TestNG

Mõlemad TestNG ja JUnit4 näeb välja sarnane, välja arvatud üks või kaks funktsiooni. Võrrelgem neid kahte, et kiiresti otsustada, milline tehnoloogia on ühikutestimise jaoks soodsam. Allolevas tabelis on esile tõstetud funktsioonid, mida mõlemad toetavad:

Erinevused JUnit ja TestNG

Annotatsioonid

Mõlemad JUnit ja TestNG kasutab märkusi ja peaaegu kõik annotatsioonid näevad välja sarnased.

TestNG kasutab @BeforeMethod ,@AfterMethod sarnaselt @Before ,@After in JUnit4.

Mõlemad TestNG ja Junit4 kasutab ajalõpuks @Test(timeout = 1000). Lisateavet vaadake allolevast tabelist-

SNA Kirjeldus TestNG JUnit 4
1 Testannotatsioon @Test @Test
2 Käivitub enne, kui praeguses klassis käivitatakse esimene testmeetod @BeforeClass @BeforeClass
3 Käivitab pärast kõiki praeguse klassi katsemeetodeid @AfterClass @AfterClass
4 Teostatakse enne iga katsemeetodit @BeforeMethod @Enne
5 Käivitub pärast iga katsemeetodit @AfterMethod @Pärast
6 annotatsioon testi ignoreerimiseks @Test(enable=false) @ignoreerima
7 annotatsioon erandiks @Test(expectedExceptions = AritmeetilineErand.klass) @Test(oodatav = AritmeetilineErand.klass)
8 timeout @Test(ajalõpp = 1000) @Test(ajalõpp = 1000)
9 Käivitub enne kõiki komplekti kuuluvaid teste @BeforeSuite n / a
10 Käivitab pärast kõiki komplekti tehtud teste @AfterSuite n / a
11 Käivitub enne testi käivitamist @BeforeTest n / a
12 Käivitub pärast katset @AfterTest n / a
13 Käivitub enne, kui käivitatakse esimene testmeetod, mis kuulub mõnda neist rühmadest @BeforeGroups n / a
14 käivitada pärast viimast testimismeetodit, mis kuulub mõnda siinsetest rühmadest @AfterGroups n / a

Sviidi test

Sviite kasutatakse mitme testi koos sooritamiseks. Sviite saab luua mõlemat kasutades TestNG ja JUnit4. Sviidid on aga võimsamad TestNG kuna see kasutab testide läbiviimiseks väga erinevaid meetodeid. Mõistame seda allpool toodud koodilõigu abil:

Kasutamine JUnit4

Allpool klass kirjeldab komplekti kasutamist sellega töötamisel 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		
}

Kasutamine TestNG

TestNG kasutab xml-i, et koondada kõik testid ühte kohta. Allpool xml kirjeldab komplekti kasutamist 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>

Ignoreeri testi

Mõlemat kasutades saame testi vahele jätta. Vaatame seda allpool toodud koodinäite abil:

Kasutamine JUnit4

Allpool koodilõik kirjeldab @ignore annotatsiooni kasutamist sellega töötamisel JUnit4:

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

Kasutamine TestNG

Allpool koodilõik kirjeldab @Test(enabled=false) märkuse kasutamist sellega töötamisel TestNG:

@Test(enabled=false)
public void TestWithException()
{  
	System.out.println("Method should be ignored as it's not ready yet");
}

Erandi test

Erandi testimine on saadaval mõlemas riigis TestNG ja JUnit4. Seda kasutatakse kontrollimiseks, milline erand on testist välja visatud?

Kasutamine JUnit4

Allpool koodilõik kirjeldab erandite testi kasutamist sellega töötamisel JUnit4:

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

Kasutamine TestNG

Allpool koodilõik kirjeldab erandite testi kasutamist sellega töötamisel TestNG:

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

Aegumine

Seda funktsiooni rakendatakse nii TestNg kui ka JUnit4. Timeout kasutatakse testi lõpetamiseks, mis võtab kauem aega kui määratud aeg (millisekundites).

Kasutamine JUnit4

Allpool koodilõik kirjeldab ajalõpu testi kasutamist sellega töötamisel JUnit4:

@Test(timeout = 1000)  
public void method1()
{  
	while (true);  
}

Kasutamine TestNG

Allpool koodilõik kirjeldab ajalõpu testi kasutamist sellega töötamisel TestNG:

@Test(timeOut = 1000)  
public void method1()
{  
	while (true);  
}

Parameetriline test

JUnit pakub lihtsamat ja loetavamat lähenemist testimiseks, mida nimetatakse parameetritestiks. Mõlemad TestNG ja JUnit toetab parameetritega testimist, kuid erinevad parameetri väärtuse määratlemise viisi poolest. Vaatame seda ükshaaval.

Kasutamine JUnit4

Märkusi "@RunWith" ja "@Parameter" kasutatakse ühikutesti parameetri väärtuse andmiseks. Märkus @Parameters peab tagastama List[] . See parameeter edastatakse argumendina klassi konstruktorisse.

@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);
     }
}

Kasutamine TestNG

In TestNG, XML-faili või "@DataProvider" kasutatakse testimise parameetri pakkumiseks.

Siin vajab meetodis deklareeritud @Parameters annotatsioon testimiseks parameetrit. Parameetrina kasutatavad andmed esitatakse TestNGXML-i konfiguratsioonifailid. Seda tehes saame singlit uuesti kasutada Testjuhtum erinevate andmekogumitega ja saame erinevaid tulemusi.

public class Test1 {

    @Test
    @Parameters(value="number")
    public void parameterTest(int number)
	{
    	System.out.println("Parameterized Number is : " + number);
    }
     
}

Vaadake allolevat xml-faili, mida kasutatakse ülaltoodud klassi jaoks:

<!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>

kokkuvõte

Me nägime JUnit4 ja TestNG võrdlus detailides. Samuti nägime, et mõlemad on sarnased, välja arvatud parameetritega test ja sõltuvustest. Lühidalt võib öelda, et paindlikkuse ja nõuete alusel saame üksuse testimiseks valida ühe neist.