TestNG vs JUnit - Forskellen mellem dem
Nรธgleforskel mellem TestNG og JUnit
- TestNG er en Java-baserede rammer, mens JUnit er en open source enhedstestramme til JAVA.
- Sammenligning TestNG Vs JUnit, TestNG annoteringer er nemmere at bruge og forstรฅ end JUnit.
- TestNG giver os mulighed for at lave parallelle tests, hvorimod JUnit understรธtter ikke at kรธre parallelle tests.
- In TestNG, Testcases kan grupperes sammen, mens i JUnit, Grouping Det er ikke muligt at udfรธre prรธver sammen.

Hvad er TestNG?
TestNG er en automatiseringstestramme, hvor NG stรฅr for "Next Generation". TestNG er inspireret af JUnit som bruger annoteringerne (@). TestNG overvinder ulemperne ved JUnit og er designet til at lave ende-til-ende test let.
Ved brug af TestNG, kan du generere en ordentlig rapport, og du kan nemt fรฅ at vide, hvor mange testsager der er bestรฅet, ikke bestรฅet og sprunget over. Du kan udfรธre de mislykkede testsager separat.
Hvad er Junit?
JUnit er en open source-enhed Test Ramme for JAVA. Det er nyttigt til Java Udviklere til at skrive og kรธre gentagelige tests. Erich Gamma og Kent Beck udviklede det oprindeligt. Det er en instans af xUnit-arkitektur. Som navnet antyder, bruges det til Enhedstest af en lille bid kode.
Udviklere, der fรธlger testdrevet metode, skal skrive og udfรธre enhedstest fรธrst fรธr enhver kode.
Nรฅr du er fรฆrdig med kode, skal du udfรธre alle test, og den skal bestรฅ. Hver gang en kode tilfรธjes, skal du udfรธre alle testsager igen og sรธrge for, at intet er brudt.
Forskelle mellem JUnit og TestNG
Bรฅde TestNG og JUnit4 ligner hinanden, bortset fra en eller to funktioner. Lad os fรฅ en sammenligning mellem de to for hurtigt at beslutte, hvilken teknologi der er mere gunstig for enhedstestning. Nedenstรฅende tabel fremhรฆver de funktioner, der understรธttes af begge:
Annotationer
Bรฅde JUnit og TestNG bruger annoteringer, og nรฆsten alle annoteringerne ligner hinanden.
TestNG bruger @BeforeMethod ,@AfterMethod svarende til @Before ,@After i JUnit4.
Bรฅde TestNG og Junit4 bruger @Test(timeout = 1000) til timeout. Tjek tabellen nedenfor for flere detaljer-
| SNA | Beskrivelse | TestNG | JUnit 4 |
|---|---|---|---|
| 1 | Testanmรฆrkning | @Prรธve | @Prรธve |
| 2 | Udfรธres fรธr den fรธrste testmetode pรฅkaldes i den aktuelle klasse | @BeforeClass | @BeforeClass |
| 3 | Udfรธrer efter alle testmetoder i den aktuelle klasse | @Efter skole | @Efter skole |
| 4 | Udfรธres fรธr hver testmetode | @FรธrMetode | @Fรธr |
| 5 | Udfรธres efter hver testmetode | @AfterMethod | @Efter |
| 6 | anmรฆrkning for at ignorere en test | @Test(aktiver=falsk) | @ignorere |
| 7 | anmรฆrkning for undtagelse | @Test(expectedExceptions = ArithmeticException.class) | @Test(expected = ArithmeticException.class) |
| 8 | timeout | @Test(timeout = 1000) | @Test(timeout = 1000) |
| 9 | Udfรธres fรธr alle test i pakken | @BeforeSuite | n / a |
| 10 | Udfรธrer efter alle test i suiten | @AfterSuite | n / a |
| 11 | Udfรธres fรธr en test kรธrer | @FรธrTest | n / a |
| 12 | Udfรธres efter en testkรธrsel | @EfterTest | n / a |
| 13 | Udfรธres fรธr den fรธrste testmetode, der tilhรธrer en af โโdisse grupper, pรฅkaldes | @FรธrGrupper | n / a |
| 14 | kรธre efter den sidste testmetode, der hรธrer til en af โโgrupperne her | @AfterGroups | n / a |
Suite Test
Suiter bruges til at udfรธre flere tests sammen. Suiter kan oprettes ved hjรฆlp af begge TestNG og JUnit4. Suiter er dog mere kraftfulde i TestNG da den bruger meget forskellige metoder til udfรธrelse af tests. Lad os forstรฅ det ved hjรฆlp af kodestykket som angivet nedenfor:
Ved brug af JUnit4
Nedenstรฅende klasse beskriver brugen af โโsuite, mens du arbejder med 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
}
Ved brug af TestNG
TestNG bruger xml til at samle alle tests pรฅ รฉt sted. Nedenfor beskriver xml brugen af โโsuite, mens du arbejder med 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>
Ignorer test
Ved at bruge begge kan vi springe en test over. Lad os se det ved hjรฆlp af kodeeksempel som vist nedenfor:
Ved brug af JUnit4
Nedenstรฅende kodestykke beskriver brugen af โโ@ignore-annotering, mens du arbejder med JUnit4:
@Ignore
public void method1()
{
System.out.println("Using @Ignore , this execution is ignored");
}
Ved brug af TestNG
Nedenstรฅende kodestykke beskriver brugen af โโ@Test(enabled=false) annotering, mens du arbejder med TestNG:
@Test(enabled=false)
public void TestWithException()
{
System.out.println("Method should be ignored as it's not ready yet");
}
Undtagelsestest
Undtagelsestest er tilgรฆngelig bรฅde i TestNG og JUnit4. Det bruges til at kontrollere, hvilken undtagelse er smidt fra testen?
Ved brug af JUnit4
Nedenstรฅende kodestykke beskriver brugen af โโundtagelsestest, mens du arbejder med JUnit4:
@Test(expected = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Ved brug af TestNG
Nedenstรฅende kodestykke beskriver brugen af โโundtagelsestest, mens du arbejder med TestNG:
@Test(expectedExceptions = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Timeout
Denne funktion er implementeret bรฅde i TestNg og JUnit4.Timeout bruges til at afslutte en test, som tager lรฆngere tid end angivet tid (i millisekunder).
Ved brug af JUnit4
Nedenstรฅende kodestykke beskriver brugen af โโtimeout-test, mens du arbejder med JUnit4:
@Test(timeout = 1000)
public void method1()
{
while (true);
}
Ved brug af TestNG
Nedenstรฅende kodestykke beskriver brugen af โโtimeout-test, mens du arbejder med TestNG:
@Test(timeOut = 1000)
public void method1()
{
while (true);
}
Parameteriseret test
JUnit giver en lettere og lรฆsbar tilgang til test kendt som Parameterized test. Begge TestNG og JUnit understรธtter parameteriseret test, men adskiller sig i den mรฅde, de definerer parametervรฆrdien pรฅ. Lad os se dette en efter en.
Ved brug af JUnit4
"@RunWith" og "@Parameter" annoteringerne bruges til at angive parametervรฆrdien for enhedstesten. Annotationen @Parameters skal returnere List[] . Denne parameter vil blive sendt til klassekonstruktรธren som et argument.
@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);
}
}
Ved brug af TestNG
In TestNG, XML-fil eller "@DataProvider" bruges til at angive en parameter til test.
Her skal @Parameters annotation erklรฆret i metoden have en parameter til test. De data, der bruges som parameter, vil give ind TestNG's XML-konfigurationsfiler. Ved at gรธre dette kan vi genbruge en enkelt Test sag med forskellige datasรฆt, og vi kan fรฅ forskellige resultater.
public class Test1 {
@Test
@Parameters(value="number")
public void parameterTest(int number)
{
System.out.println("Parameterized Number is : " + number);
}
}
Se nedenstรฅende xml-fil, der skal bruges til ovenstรฅende klasse:
<!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>
Resumรฉ
Vi sรฅ JUnit4 og TestNG sammenligning i detaljer. Vi sรฅ ogsรฅ, at begge er ens, undtagen parameteriseret test og afhรฆngighedstest. Kort sagt kan vi sige, at vi baseret pรฅ fleksibilitet og krav kan vรฆlge en af โโdem til enhedstestning.

