TestNG vs JUnit – Ero niiden välillä
Keskeinen ero TestNG ja JUnit
- TestNG on Java-pohjainen kehys JUnit on avoimen lähdekoodin Unit Testing Framework JAVA:lle.
- Vertaamalla TestNG Vs JUnit, TestNG huomautuksia on helpompi käyttää ja ymmärtää kuin JUnit.
- TestNG mahdollistaa rinnakkaisten testien luomisen, kun taas JUnit ei tue rinnakkaisten testien suorittamista.
- In TestNG, Testitapaukset voidaan ryhmitellä yhteen ollessaan JUnit, Ryhmäping testien tekeminen yhdessä ei ole mahdollista.

Mikä on TestNG?
TestNG on automaation testauskehys, jossa NG tarkoittaa "seuraavaa sukupolvea". TestNG on inspiroinut JUnit joka käyttää huomautuksia (@). TestNG voittaa haitat JUnit ja on suunniteltu tekemään end-to-end-testaus helppoa.
Käyttäminen TestNG, voit luoda oikean raportin ja saada helposti selville, kuinka monta testitapausta on hyväksytty, epäonnistunut ja ohitettu. Voit suorittaa epäonnistuneet testitapaukset erikseen.
Mikä on Junit?
JUnit on avoimen lähdekoodin yksikkö Testaus Framework JAVA:lle. Se on hyödyllinen Java Kehittäjät voivat kirjoittaa ja suorittaa toistettavia testejä. Erich Gamma ja Kent Beck kehittävät sen aluksi. Se on esimerkki xUnit-arkkitehtuurista. Kuten nimestä voi päätellä, sitä käytetään Yksikkötestaus pienestä koodipalasta.
Testausmenetelmiä noudattavien kehittäjien on kirjoitettava ja suoritettava yksikkötesti ennen koodia.
Kun olet valmis koodin kanssa, sinun tulee suorittaa kaikki testit, ja sen pitäisi läpäistä. Joka kerta kun koodi lisätään, sinun on suoritettava kaikki testitapaukset uudelleen ja varmistettava, ettei mikään ole rikki.
Erot JUnit ja TestNG
molemmat TestNG ja JUnit4 näyttää samanlaiselta, lukuun ottamatta yhtä tai kahta ominaisuutta. Vertaillaan näitä kahta, jotta voimme nopeasti päättää, kumpi tekniikka on edullisempi yksikkötestauksessa. Alla oleva taulukko korostaa molempien tukemia ominaisuuksia:
Merkinnät
molemmat JUnit ja TestNG käyttää huomautuksia ja melkein kaikki merkinnät näyttävät samanlaisilta.
TestNG käyttää @BeforeMethod ,@AfterMethod -menetelmää, joka on samanlainen kuin @Before ,@After in JUnit4.
molemmat TestNG ja Junit4 käyttää @Test(timeout = 1000) aikakatkaisuun. Katso alla olevasta taulukosta lisätietoja -
| SN | Tuotetiedot | TestNG | JUnit 4 |
|---|---|---|---|
| 1 | Testimerkintä | @Testata | @Testata |
| 2 | Suoritetaan ennen kuin ensimmäinen testimenetelmä kutsutaan nykyisessä luokassa | @Ennen tuntia | @Ennen tuntia |
| 3 | Suorittaa kaikkien nykyisen luokan testimenetelmien jälkeen | @Oppitunnin jälkeen | @Oppitunnin jälkeen |
| 4 | Suoritetaan ennen jokaista testimenetelmää | @BeforeMethod | @Ennen |
| 5 | Suoritetaan jokaisen testimenetelmän jälkeen | @AfterMethod | @Jälkeen |
| 6 | huomautus testin ohittamiseksi | @Test(enable=false) | @jättää huomiotta |
| 7 | huomautus poikkeuksesta | @Test(expectedExceptions = Aritmeettinen poikkeus.luokka) | @Test(odotettu = Aritmeettinen poikkeus.luokka) |
| 8 | aikakatkaisu | @Test(aikakatkaisu = 1000) | @Test(aikakatkaisu = 1000) |
| 9 | Suoritetaan ennen kaikkia sarjan testejä | @BeforeSuite | n / a |
| 10 | Suorittaa kaikkien sarjassa olevien testien jälkeen | @AfterSuite | n / a |
| 11 | Suoritetaan ennen testiajoa | @BeforeTest | n / a |
| 12 | Toimii koeajon jälkeen | @AfterTest | n / a |
| 13 | Suoritetaan ennen kuin kutsutaan ensimmäistä testimenetelmää, joka kuuluu johonkin näistä ryhmistä | @BeforeGroups | n / a |
| 14 | suoritetaan viimeisen testimenetelmän jälkeen, joka kuuluu mihin tahansa tässä olevista ryhmistä | @AfterGroups | n / a |
Suite Test
Sviittejä käytetään useiden testien suorittamiseen yhdessä. Sviittejä voidaan luoda molempia käyttämällä TestNG ja JUnit4. Sviitit ovat kuitenkin tehokkaampia TestNG koska se käyttää hyvin erilaista menetelmää testien suorittamiseen. Ymmärretään se alla olevan koodinpätkän avulla:
Käyttäminen JUnit4
Alla olevassa luokassa kuvataan sarjan käyttöä työskennellessäsi 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
}
Käyttäminen TestNG
TestNG käyttää xml:ää kaikkien testien niputtamiseksi yhteen paikkaan. Alla xml kuvaa paketin käyttöä työskennellessään 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>
Ohita testi
Molempia käyttämällä voimme ohittaa testin. Katsotaanpa sitä alla olevan koodiesimerkin avulla:
Käyttäminen JUnit4
Alla koodinpätkä kuvaa @ignore-merkinnän käyttöä työskennellessään JUnit4:
@Ignore
public void method1()
{
System.out.println("Using @Ignore , this execution is ignored");
}
Käyttäminen TestNG
Alla koodinpätkä kuvaa @Test(enabled=false) -merkinnän käyttöä työskennellessään TestNG:
@Test(enabled=false)
public void TestWithException()
{
System.out.println("Method should be ignored as it's not ready yet");
}
Poikkeustesti
Poikkeustestaus on saatavilla molemmissa TestNG ja JUnit4. Sitä käytetään tarkistamaan, mikä poikkeus heitetään testistä?
Käyttäminen JUnit4
Alla koodinpätkä kuvaa poikkeustestin käyttöä työskennellessään JUnit4:
@Test(expected = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Käyttäminen TestNG
Alla koodinpätkä kuvaa poikkeustestin käyttöä työskennellessään TestNG:
@Test(expectedExceptions = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Timeout
Tämä ominaisuus on toteutettu sekä TestNg:ssä että JUnit4. Aikakatkaisua käytetään testin päättämiseen, joka kestää määritettyä aikaa kauemmin (millisekunteina).
Käyttäminen JUnit4
Alla koodinpätkä kuvaa aikakatkaisutestin käyttöä työskennellessäsi kanssa JUnit4:
@Test(timeout = 1000)
public void method1()
{
while (true);
}
Käyttäminen TestNG
Alla koodinpätkä kuvaa aikakatkaisutestin käyttöä työskennellessäsi kanssa TestNG:
@Test(timeOut = 1000)
public void method1()
{
while (true);
}
Parametrisoitu testi
JUnit tarjoaa helpomman ja luettavamman lähestymistavan testaukseen, joka tunnetaan nimellä Parameterized Test. Molemmat TestNG ja JUnit tukee parametroitua testiä, mutta eroavat tavassa, jolla ne määrittelevät parametrin arvon. Katsotaan tämä yksitellen.
Käyttäminen JUnit4
"@RunWith"- ja "@Parameter"-merkintöjä käytetään antamaan parametriarvo yksikkötestille. Annotation @Parameters on palautettava List[] . Tämä parametri välitetään luokan rakentajalle argumenttina.
@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);
}
}
Käyttäminen TestNG
In TestNG, XML-tiedostoa tai "@DataProvider" käytetään antamaan parametri testausta varten.
Tässä menetelmässä ilmoitettu @Parameters-merkintä tarvitsee parametrin testausta varten. Parametrina käytetyt tiedot tulevat sisään TestNGXML-määritystiedostot. Näin voimme käyttää yksittäistä kappaletta uudelleen Testitapaus eri tietojoukoilla, ja voimme saada erilaisia tuloksia.
public class Test1 {
@Test
@Parameters(value="number")
public void parameterTest(int number)
{
System.out.println("Parameterized Number is : " + number);
}
}
Katso alla olevaa xml-tiedostoa, jota käytetään yllä olevassa luokassa:
<!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>
Yhteenveto
Näimme JUnit4 ja TestNG vertailu yksityiskohdissa. Näimme myös, että molemmat ovat samanlaisia paitsi parametrisoitu testi ja riippuvuustesti. Lyhyesti voidaan sanoa, että joustavuuden ja vaatimuksen perusteella voimme valita minkä tahansa niistä yksikkötestaukseen.

