JUnit Annotationshandledning med exempel: Vad är @Test och @After
Vad är JUnit Anteckningar?
JUnit Anteckningar är en speciell form av syntaktisk metadata som kan läggas till Java källkod för bättre kodläsbarhet och struktur. Variabler, parametrar, paket, metoder och klasser kan annoteras. Anteckningar introducerades i Junit4, vilket gör Java kod mer läsbar och enkel. Detta är den stora skillnaden mellan Junit3 och Junit4 att Junit4 är annoteringsbaserad.
Med kunskapen om annoteringar i Junit5 kan man enkelt lära sig och implementera en JUnit testa. Nedan är det viktiga och ofta använda JUnit anteckningslista:
S.No. | Anteckningar | Description |
---|---|---|
1. | @Testa | Den här kommentaren är en ersättning av org.junit.TestCase som indikerar att den offentliga void-metoden som den är kopplad till kan köras som ett testfall. |
2. | @Innan | Den här anteckningen används om du vill exekvera någon sats som t.ex. förutsättningar före varje testfall. |
3. | @Innan lektionen | Denna anteckning används om du vill exekvera några satser innan alla testfall för t.ex. testanslutning måste exekveras innan alla testfall. |
4. | @Efter | Denna anteckning kan användas om du vill köra några satser efter varje Testfall för t.ex. återställning av variabler, radering av temporära filer, variabler, etc. |
5. | @Efter lektionen | Denna annotering kan användas om du vill exekvera några satser efter alla testfall för t.ex. Frigöra resurser efter exekvering av alla testfall. |
6. | @Ignorerar | Denna anteckning kan användas om du vill ignorera vissa satser under testkörning för att t.ex. inaktivera några testfall under testkörning. |
7. | @Test(timeout=500) | Den här anteckningen kan användas om du vill ställa in en tidsgräns under testkörning, t.ex. om du arbetar under något SLA (Service Level Agreement), och tester måste slutföras inom en viss tid. |
8. | @Test(expected=IllegalArgumentException.class) | Denna anteckning kan användas om du vill hantera något undantag under testkörning. Till exempel om du vill kontrollera om en viss metod ger ett specificerat undantag eller inte. |
JUnit Anteckningar Exempel
Låt oss skapa en klass som omfattar viktiga JUnit anteckningar med enkla utskriftssatser och exekvera det med en testkörningsklass:
Steg 1) Överväg att nedanstående java-klass har olika metoder som är kopplade till ovanstående annoteringar:
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"); } }
Steg 2) låt oss skapa en testlöparklass för att köra ovanstå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()); } }
Förväntat resultat
- Alla testfall kommer att exekveras ett efter ett, och alla utskriftssatser kan ses på en konsol.
- Som diskuterats i ovanstående tabell @Before annotation in JUnit, @BeforeClass [ metod m1() och m2() ] kommer att exekveras före varje respektive före alla testfall.
- På samma sätt @After in JUnit, @afterClass (metod m3() och m4()) kommer att exekveras efter varje och efter alla testfall. @ignore (metod m6()) kommer att behandlas som att testet ignoreras.
Låt oss analysera testfall som används i ovanstående Java-klass i detalj:
- Överväg metod m5() enligt nedan:
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
I ovanstående metod när du lägger till en sträng i variabeln "lista" så
- list.isEmpty() kommer att returnera falskt.
- assertFalse(list.isEmpty()) måste returnera sant.
- Som ett resultat kommer testfallet passera.
Eftersom du bara har lagt till en sträng i listan, så storleken är en.
- list.size() måste returnera int-värdet som "1" .
- So assertEquals(1, list.size()) måste returnera sant.
- Som ett resultat kommer testfallet passera.
- Överväg metod m7() enligt nedan:
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
Som diskuterats ovan @Test(timeout = 10)anteckning används för att framtvinga timeout i testfallet.
- Överväg metod m8() enligt nedan:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Som diskuterats ovan @Test(förväntat) kommer att leta efter specificerat undantag under dess exekvering så metod m8() kommer att kasta "Inget sådant metodundantag." Som ett resultat kommer testet att utföras med ett undantag.
Eftersom alla testfall är godkända resulterar detta i en framgångsrik testkörning.
Faktiskt resultat
Eftersom det finns tre testfall i exemplet ovan, kommer alla testfall att exekveras ett efter ett. Se utdata nedan:
Se nedan tryckta uttalanden som kan ses på konsolen:
Använder @BeforeClass , exekveras före alla testfall
Använda @Before-anteckningar, exekveras före varje testfall
Använder @After, exekveras efter varje testfall
Använda @Before-anteckningar, exekveras före varje testfall
Genom att använda @Test(timeout) kan den användas för att framtvinga timeout JUnit4 testfall
Använder @After, exekveras efter varje testfall
Använda @Before-anteckningar, exekveras före varje testfall
Genom att använda @Test(expected), kommer den att leta efter specificerat undantag under körningen
Använder @After, exekveras efter varje testfall
Använder @AfterClass, exekveras efter alla testfall
JUnit Påstå klass
Den här klassen tillhandahåller ett gäng påståendemetoder som är användbara för att skriva ett testfall. Om alla påståenden godkänns är testresultaten framgångsrika. Om något påstående uttalande misslyckas, misslyckas testresultaten.
Som du sett tidigare beskriver tabellen nedan viktiga Assert-metoder och beskrivning:
S.No. | Metod | Description |
---|---|---|
1. | void assertEquals(boolesk förväntad, boolesk faktiskt) | Den kontrollerar om två värden är lika med lika med metoden för objektklassen |
2. | void assertFalse (booleskt tillstånd) | funktionalitet är att kontrollera att ett villkor är falskt. |
3. | void assertNotNull(Objektobjekt) | "assertNotNull" funktionalitet är att kontrollera att ett objekt inte är null. |
4. | void assertNull(Objektobjekt) | "assertNull" funktionalitet är att kontrollera att ett objekt är null. |
5. | void assertTrue (booleskt tillstånd) | "assertTrue"-funktionen är att kontrollera att ett villkor är sant. |
6. | void fail() | Om du vill kasta något påståendefel har du fail() som alltid resulterar i ett misslyckande. |
7. | void assertSame([Strängmeddelande] | "assertSame" funktionalitet är att kontrollera att de två objekten refererar till samma objekt. |
8. | void assertNotSame([Strängmeddelande] | "assertNotSame" funktionalitet är att kontrollera att de två objekten inte refererar till samma objekt. |
JUnit Testfall Klass
För att köra flera tester är TestCase-klassen tillgänglig i org.junit.TestCase paket. @Testkommentaren berättar JUnit att denna public void-metod (Test Case här) som den är kopplad till kan köras som ett testfall.
Tabellen nedan visar några viktiga metoder tillgängliga i org.junit.TestCase klass:
S.No. | Metod | Description |
---|---|---|
1. | int countTestCases() | Denna metod används för att räkna hur många antal testfall som exekveras av kör (TestResultat tr) metod. |
2. | TestResult createResult() | Denna metod används för att skapa en Testresultat objekt. |
3. | Sträng getName () | Denna metod returnerar en sträng som inte är annat än en Testfall. |
4. | TestResult run() | Denna metod används för att utföra ett test som returnerar en Testresultat objektet |
5. | ogiltig körning (testresultatresultat) | Denna metod används för att utföra ett test med en Testresultat objekt som inte returnerar något. |
6. | void setName (Strängnamn) | Denna metod används för att ange ett namn på en Testfall. |
7. | void setUp() | Denna metod används för att skriva resursassociationskod. t.ex. Skapa en databasanslutning. |
8. | void tearDown() | Den här metoden används för att skriva resursversionskod. t.ex. Frigör databasanslutningen efter att ha utfört transaktionsoperationen. |
JUnit Testresultatklass
När du kör ett test returnerar det ett resultat (i form av Testresultat objekt). Detta TestResult-objekt kan användas för att analysera det resulterande objektet. Detta testresultat kan vara antingen misslyckat eller framgångsrikt.
Se tabellen nedan för viktiga metoder som används i klassen org.junit.TestResult:
S.No. | Metod | Description |
---|---|---|
1. | void addError(Testtest, Kastbar t) | Denna metod används om du behöver lägga till ett fel i testet. |
2. | void addFailure(Testtest, AssertionFailedError t) | Den här metoden används om du behöver lägga till ett fel i listan över fel. |
3. | void endTest(Testtest) | Denna metod används för att meddela att ett test utförs (slutfört) |
4. | int errorCount() | Denna metod används för att få felet som upptäcks under testkörning. |
5. | Uppräkning fel() | Denna metod returnerar helt enkelt en samling (uppräkning här) av fel. |
6. | int failureCount() | Denna metod används för att få antalet fel som upptäckts under testkörning. |
7. | ogiltig körning (TestCase-test) | Denna metod används för att utföra ett testfall. |
8. | int runCount() | Denna metod räknar helt enkelt det utförda testet. |
9. | void startTest(Testtest) | Denna metod används för att meddela att ett test har startat. |
10. | void stop() | Denna metod används för att testkörning ska stoppas. |
JUnit Testsvitklass
Om du vill utföra flera tester i en angiven ordning kan det göras genom att kombinera alla tester på ett ställe. Denna plats kallas som testsviterna.
Se tabellen nedan för viktiga metoder som används i org.junit.TestSuite klass:
S.No. | Metod | Description |
---|---|---|
1. | void addTest (Test test) | Den här metoden används om du vill lägga till ett test i sviten. |
2. | void addTestSuite(Class testklass) | Den här metoden används om du vill ange klassen medan du lägger till ett test i sviten. |
3. | int countTestCases() | Denna metod används om du vill räkna antalet testfall. |
4. | Sträng getName () | Denna metod används för att få namnet på testsviten. |
5. | ogiltig körning (testresultatresultat) | Denna metod används för att utföra ett test och samla in testresultat i Testresultat objekt. |
6. | void setName (Strängnamn) | Denna metod används för att ställa in namnet på Test svit. |
7. | Testa testAt(int index) | Denna metod används om du vill returnera testet vid ett givet index. |
8. | int testCount() | Denna metod används om du vill returnera ett antal tester i sviten. |
9. | statisk testvarning (strängmeddelande) | Denna metod returnerar ett test som kommer att misslyckas och loggar ett varningsmeddelande. |
Sammanfattning
- JUnit tillhandahåller ett portabelt API, som tillhandahåller alla viktiga klasser och Selenium anteckningar användbara för att skriva ett enhetstest.
- Klasser som är mycket användbara när du skriver ett testfall
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Viktigt och ofta använt JUnit anteckningslista@Before@BeforeClass@After
@Efter lektionen
@Testa
@Strunta i