JUnit Annotationsvejledning med eksempel: Hvad er @Test og @After
Hvad er JUnit Anmærkninger?
JUnit Annotationer er en speciel form for syntaktisk metadata, der kan tilføjes Java kildekode for bedre kodelæsbarhed og struktur. Variabler, parametre, pakker, metoder og klasser kan annoteres. Annoteringer blev introduceret i Junit4, hvilket gør Java kode mere læsbar og enkel. Dette er den store forskel mellem Junit3 og Junit4, at Junit4 er annotationsbaseret.
Med kendskabet til annoteringer i Junit5 kan man nemt lære og implementere en JUnit prøve. Nedenfor er det vigtige og ofte brugte JUnit annotationsliste:
S.No. | Annotationer | Produktbeskrivelse |
---|---|---|
1. | @Prøve | Denne annotation er en erstatning for org.junit.TestCase, som angiver, at public void-metoden, som den er knyttet til, kan udføres som en testcase. |
2. | @Før | Denne annotation bruges, hvis du ønsker at udføre en sætning, såsom forudsætninger, før hver testcase. |
3. | @BeforeClass | Denne annotation bruges, hvis du ønsker at udføre nogle sætninger før alle testcases for fx testforbindelse skal udføres før alle testcases. |
4. | @Efter | Denne annotation kan bruges, hvis du ønsker at udføre nogle udsagn efter hver Test sag til fx nulstilling af variabler, sletning af midlertidige filer, variabler osv. |
5. | @Efter skole | Denne annotation kan bruges, hvis du ønsker at udføre nogle sætninger efter alle testcases til f.eks. Frigivelse af ressourcer efter eksekvering af alle testcases. |
6. | @Ignorerer | Denne annotation kan bruges, hvis du vil ignorere nogle udsagn under testudførelsen for fx at deaktivere nogle testcases under testudførelsen. |
7. | @Test(timeout=500) | Denne annotation kan bruges, hvis du vil indstille en timeout under testudførelsen, hvis du f.eks. arbejder under en eller anden SLA (Service Level Agreement), og test skal gennemføres inden for en bestemt tid. |
8. | @Test(expected=IllegalArgumentException.class) | Denne annotation kan bruges, hvis du ønsker at håndtere nogle undtagelser under testudførelse. For eksempel, hvis du vil kontrollere, om en bestemt metode kaster en specificeret undtagelse eller ej. |
JUnit Eksempel på anmærkninger
Lad os skabe en klasse, der dækker vigtigt JUnit annoteringer med simple print-udsagn og udfør det med en testløberklasse:
Trin 1) Overvej nedenstående java-klasse med forskellige metoder, der er knyttet til ovenstående annoteringer:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Trin 2) lad os oprette en testløberklasse til at udføre ovenstående test:
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
forventet resultat
- Alle testcases vil blive udført én efter én, og alle print-erklæringer kan ses på en konsol.
- Som diskuteret i ovenstående tabel @Før annotering i JUnit, @BeforeClass [ metode m1() og m2() ] vil blive udført før hver og før alle testcases hhv.
- På samme måde @After in JUnit, @afterClass (metode m3() og m4()) vil blive udført efter henholdsvis hver og efter alle testcases. @ignore (metode m6()) vil blive behandlet som at ignorere testen.
Lad os analysere testcases brugt i ovenstående java-klasse i detaljer:
- Overvej metode m5() som angivet nedenfor:
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
I ovenstående metode, når du tilføjer en streng i variablen "liste", så
- list.isEmpty() vil returnere falsk.
- assertFalse(list.isEmpty()) skal returnere sandt.
- Som følge heraf vil testcasen passerer.
Da du kun har tilføjet én streng på listen, så størrelsen er én.
- list.size() skal returnere int-værdien som "1".
- So assertEquals(1, list.size()) skal returnere sandt.
- Som følge heraf vil testcasen passerer.
- Overvej metode m7() som angivet nedenfor:
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
Som diskuteret ovenfor @Test(timeout = 10)annotation bruges til at gennemtvinge timeout i testsagen.
- Overvej metode m8() som angivet nedenfor:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Som diskuteret ovenfor @Test(forventet) vil tjekke for specificeret undtagelse under dens udførelse, så metode m8() vil kaste "No Such Method Exception." Som et resultat vil testen blive udført med en undtagelse.
Da alle testcases er bestået, resulterer dette i en vellykket testeksekvering.
Faktisk resultat
Da der er tre testcases i ovenstående eksempel, vil alle testcases blive udført én efter én. Se output nedenfor:
Se nedenstående trykte erklæringer, som kan ses på konsollen:
Brug af @BeforeClass , udført før alle testcases
Brug af @Before-annoteringer, udført før hver testcase
Brug af @After, udført efter hver testcase
Brug af @Before-annoteringer, udført før hver testcase
Ved at bruge @Test(timeout) kan den bruges til at gennemtvinge timeout JUnit4 testcase
Brug af @After, udført efter hver testcase
Brug af @Before-annoteringer, udført før hver testcase
Ved at bruge @Test(expected), vil den kontrollere for specificerede undtagelser under udførelsen
Brug af @After, udført efter hver testcase
Ved hjælp af @AfterClass, udført efter alle testsager
JUnit hævde klasse
Denne klasse giver en masse påstandsmetoder, der er nyttige til at skrive en testcase. Hvis alle påstandsudsagn er bestået, er testresultaterne vellykkede. Hvis en påstandserklæring mislykkes, mislykkes testresultaterne.
Som du har set tidligere, beskriver nedenstående tabel vigtige Assert-metoder og beskrivelse:
S.No. | Metode | Produktbeskrivelse |
---|---|---|
1. | void assertEquals(boolesk forventet, boolesk faktisk) | Den kontrollerer, om to værdier er lig med lig med metoden Object klasse |
2. | void assertFalse (boolesk tilstand) | funktionalitet er at kontrollere, at en betingelse er falsk. |
3. | void assertNotNull(Objektobjekt) | "assertNotNull" funktionalitet er at kontrollere, at et objekt ikke er null. |
4. | void assertNull(Objektobjekt) | "assertNull" funktionalitet er at kontrollere, at et objekt er null. |
5. | void assertTrue (boolesk tilstand) | "assertTrue" funktionalitet er at kontrollere, at en betingelse er sand. |
6. | void fail() | Hvis du vil kaste en påstandsfejl, har du fail(), der altid resulterer i en fejlkendelse. |
7. | void assertSame([String message] | "assertSame" funktionalitet er at kontrollere, at de to objekter refererer til det samme objekt. |
8. | void assertNotSame([String message] | "assertNotSame" funktionalitet er at kontrollere, at de to objekter ikke refererer til det samme objekt. |
JUnit Test Cases Klasse
For at køre flere test er TestCase-klassen tilgængelig i org.junit.TestCase pakker. @Test annotation fortæller JUnit at denne public void-metode (Test Case her), som den er knyttet til, kan køres som en testcase.
Nedenstående tabel viser nogle vigtige metoder tilgængelige i org.junit.TestCase klasse:
S.No. | Metode | Produktbeskrivelse |
---|---|---|
1. | int countTestCases() | Denne metode bruges til at tælle hvor mange antal testcases udført af kør (TestResultat tr) fremgangsmåde. |
2. | TestResult createResult() | Denne metode bruges til at skabe en Testresultat objekt. |
3. | String getName () | Denne metode returnerer en streng, som ikke er andet end en Test sag. |
4. | TestResult run() | Denne metode bruges til at udføre en test, som returnerer en Testresultat objekt |
5. | ugyldig kørsel (testresultatresultat) | Denne metode bruges til at udføre en test med en Testresultat objekt som ikke returnerer noget. |
6. | ugyldigt sætnavn (strengnavn) | Denne metode bruges til at angive et navn på en Test sag. |
7. | ugyldig opsætning() | Denne metode bruges til at skrive ressourcetilknytningskode. f.eks. Opret en databaseforbindelse. |
8. | void tearDown() | Denne metode bruges til at skrive ressourcefrigivelseskode. f.eks. Frigiv databaseforbindelse efter udførelse af transaktionsoperation. |
JUnit Testresultatklasse
Når du udfører en test, returnerer den et resultat (i form af Testresultat objekt). Dette TestResult-objekt kan bruges til at analysere det resulterende objekt. Dette testresultat kan enten være mislykket eller vellykket.
Se nedenstående tabel for vigtige metoder, der bruges i org.junit.TestResult-klassen:
S.No. | Metode | Produktbeskrivelse |
---|---|---|
1. | void addError(Test test, Throwable t) | Denne metode bruges, hvis du ønsker at tilføje en fejl til testen. |
2. | void addFailure(Test test, AssertionFailedError t) | Denne metode bruges, hvis du ønsker at tilføje en fejl til listen over fejl. |
3. | void endTest (Test test) | Denne metode bruges til at meddele, at en test er udført (afsluttet) |
4. | int errorCount() | Denne metode bruges til at få fejlen opdaget under testudførelsen. |
5. | Optælling fejl() | Denne metode returnerer simpelthen en samling (Optælling her) af fejl. |
6. | int failureCount() | Denne metode bruges til at få optællingen af fejl, der er opdaget under testudførelsen. |
7. | ugyldig kørsel (TestCase-test) | Denne metode bruges til at udføre en testcase. |
8. | int runCount() | Denne metode tæller simpelthen den udførte test. |
9. | void startTest (Test test) | Denne metode bruges til at meddele, at en test er startet. |
10. | void stop() | Denne metode bruges til at prøvekørsel, der skal stoppes. |
JUnit Test Suite klasse
Hvis du ønsker at udføre flere tests i en bestemt rækkefølge, kan det gøres ved at kombinere alle testene ét sted. Dette sted kaldes testsuiterne.
Se nedenstående tabel for vigtige metoder, der bruges i org.junit.TestSuite klasse:
S.No. | Metode | Produktbeskrivelse |
---|---|---|
1. | void addTest (Test test) | Denne metode bruges, hvis du vil tilføje en test til suiten. |
2. | void addTestSuite(Class testklasse) | Denne metode bruges, hvis du ønsker at angive klassen, mens du tilføjer en test til suiten. |
3. | int countTestCases() | Denne metode bruges, hvis du vil tælle antallet af testcases. |
4. | String getName () | Denne metode bruges til at få navnet på testpakken. |
5. | ugyldig kørsel (testresultatresultat) | Denne metode bruges til at udføre en test og indsamle testresultater i Testresultat objekt. |
6. | ugyldigt sætnavn (strengnavn) | Denne metode bruges til at angive navnet på TestSuite. |
7. | Test testAt(int index) | Denne metode bruges, hvis du ønsker at returnere testen ved et givet indeks. |
8. | int testCount() | Denne metode bruges, hvis du ønsker at returnere en række tests i Suiten. |
9. | statisk testadvarsel (strengmeddelelse) | Denne metode returnerer en test, som mislykkes og logger en advarselsmeddelelse. |
Resumé
- JUnit giver en bærbar API, som giver alle vigtige klasser og Selenium anmærkninger nyttige til at skrive en enhedstest.
- Klasser, som er meget nyttige, mens du skriver en testcase
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Vigtig og ofte brugt JUnit anmærkningsliste@Before@BeforeClass@After
@Efter skole
@Prøve
@Ignorere