Zelfstudie voor JUnit-annotaties met voorbeeld

Inhoudsopgave:

Anonim

Wat zijn JUnit-annotaties?

JUNIT-ANNOTATIES is een speciale vorm van syntactische metagegevens die kunnen worden toegevoegd aan de Java-broncode voor een betere leesbaarheid en structuur van de code. Variabelen, parameters, pakketten, methoden en klassen kunnen worden geannoteerd. Annotaties zijn geïntroduceerd in Junit4, waardoor Java-code leesbaarder en eenvoudiger wordt. Dit is het grote verschil tussen Junit3 en Junit4 dat Junit4 op annotaties is gebaseerd.

Met de kennis van annotaties in Junit5, kan men gemakkelijk een JUnit-test leren en implementeren. Hieronder vindt u de lijst met belangrijke en vaak gebruikte annotaties:

S.No. Annotaties Omschrijving
1. @Test Deze annotatie is een vervanging van org.junit.TestCase, wat aangeeft dat de openbare ongeldige methode waaraan deze is gekoppeld, kan worden uitgevoerd als een testcase.
2. @Voordat Deze annotatie wordt gebruikt als u voor elke testcase een verklaring wilt uitvoeren, zoals randvoorwaarden.
3. @Voor klas Deze annotatie wordt gebruikt als u enkele instructies wilt uitvoeren voordat alle testgevallen voor bijvoorbeeld testverbindingen moeten worden uitgevoerd voordat alle testgevallen moeten worden uitgevoerd.
4. @Na Deze annotatie kan worden gebruikt als u na elke testcase enkele instructies wilt uitvoeren voor bijvoorbeeld het resetten van variabelen, het verwijderen van tijdelijke bestanden, variabelen, enz.
5. @Na de les Deze annotatie kan worden gebruikt als je een aantal statements na alle testcases wilt uitvoeren voor bijvoorbeeld het vrijgeven van resources na het uitvoeren van alle testcases.
6. @Ignores Deze annotatie kan worden gebruikt als u bepaalde uitspraken wilt negeren tijdens het uitvoeren van een test, bijvoorbeeld het uitschakelen van enkele testgevallen tijdens het uitvoeren van een test.
7. @Test (time-out = 500) Deze annotatie kan worden gebruikt als u een time-out wilt instellen tijdens het uitvoeren van een test, bijvoorbeeld als u werkt onder een bepaalde SLA (Service Level Agreement) en tests binnen een bepaalde tijd moeten worden voltooid.
8. @Test (verwacht = IllegalArgumentException.class) Deze annotatie kan worden gebruikt als u een uitzondering wilt afhandelen tijdens het uitvoeren van de test. Bijvoorbeeld als u wilt controleren of een bepaalde methode een gespecificeerde uitzondering genereert of niet.

In deze tutorial leer je-

  • Voorbeeld van JUnit-annotaties
  • JUnit Assert Class
  • JUnit Test Cases Klasse
  • JUnit TestResult-klasse
  • JUnit Test Suite-klasse

Voorbeeld van JUnit-annotaties

Laten we een klasse maken die belangrijke JUnit-annotaties dekt met eenvoudige afdrukinstructies en deze uitvoeren met een testrunner-klasse:

Stap 1) Overweeg dat de onderstaande Java-klasse verschillende methoden heeft die zijn gekoppeld aan de hierboven vermelde annotaties:

JunitAnnotationsExample.java

pakket guru99.junit;importeer statische org.junit.Assert.assertEquals;importeer statische org.junit.Assert.assertFalse;importeer java.util.ArrayList;importeer org.junit.After;importeer org.junit.AfterClass;importeer org.junit.Before;importeer org.junit.BeforeClass;importeer org.junit.Ignore;importeer org.junit.Test;openbare klasse JunitAnnotationsExample {private ArrayList  lijst;@Voor klasopenbare statische leegte m1 () {System.out.println ("Met behulp van @BeforeClass, uitgevoerd vóór alle testgevallen");​@Voordatopenbare leegte m2 () {list = new ArrayList  ();System.out.println ("Gebruik van @Before annotaties, uitgevoerd voor elke testcase");​@Na de lesopenbare statische leegte m3 () {System.out.println ("Met @AfterClass, uitgevoerd na alle testgevallen");​@Naopenbare leegte m4 () {lijst.clear ();System.out.println ("Met @After, uitgevoerd na elke testcase");​@Testopenbare leegte m5 () {list.add ("test");assertFalse (lijst.isEmpty ());assertEquals (1, list.size ());​@Negerenopenbare leegte m6 () {System.out.println ("Met @Ignore wordt deze uitvoering genegeerd");​@Test (time-out = 10)openbare leegte m7 () {System.out.println ("Met @Test (time-out) kan het worden gebruikt om een ​​time-out af te dwingen in het JUnit4-testgeval");​@Test (verwacht = NoSuchMethodException.class)openbare leegte m8 () {System.out.println ("Met behulp van @Test (verwacht), zal het tijdens de uitvoering controleren op gespecificeerde uitzondering");​​

Stap 2) Laten we een testrunner-klasse maken om bovenstaande test uit te voeren:

TestRunner.java

pakket guru99.junit;importeer org.junit.runner.JUnitCore;importeer org.junit.runner.Result;import org.junit.runner.notification.Failure;openbare klasse TestRunner {public static void main (String [] args) {Resultaat resultaat = JUnitCore.runClasses (JunitAnnotationsExample.class);voor (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());​System.out.println ("Result ==" + result.wasSuccessful ());​​

verwacht resultaat

  • Alle testcases worden een voor een uitgevoerd en alle printinstructies zijn te zien op een console.
  • Zoals besproken in bovenstaande tabel @Before, zullen @BeforeClass [methode m1 () en m2 ()] respectievelijk vóór en voor alle testgevallen worden uitgevoerd.
  • Op dezelfde manier wordt @ after, @ afterClass (methode m3 () en m4 ()) uitgevoerd na respectievelijk elke en na alle testgevallen. @ignore (methode m6 ()) wordt beschouwd als het negeren van de test.

Laten we de testcases die in de bovenstaande Java-klasse zijn gebruikt, in detail analyseren:

  1. Overweeg methode m5 () zoals hieronder weergegeven:
@Testopenbare leegte m5 () {list.add ("test");assertFalse (lijst.isEmpty ());assertEquals (1, list.size ());​

In bovenstaande methode als je een string toevoegt in de variabele "lijst" dus

  • list.isEmpty () zal false retourneren.
  • assertFalse (list.isEmpty ()) moet true retourneren.
  • Als resultaat zal de testcase slagen .

Omdat je maar één string aan de lijst hebt toegevoegd, is de maat dus één.

  • list.size () moet de int-waarde retourneren als "1".
  • Dus assertEquals (1, list.size ()) moet true retourneren.
  • Als resultaat zal de testcase slagen .
  1. Overweeg methode m7 () zoals hieronder weergegeven:
@Test (time-out = 10)openbare leegte m7 () {System.out.println ("Met @Test (time-out) kan het worden gebruikt om een ​​time-out af te dwingen in het JUnit4-testgeval");​

Zoals hierboven besproken, wordt @Test (timeout = 10) annotatie gebruikt om een ​​time-out af te dwingen in het testgeval.

  1. Overweeg methode m8 () zoals hieronder weergegeven:
@Test (verwacht = NoSuchMethodException.class)openbare leegte m8 () {System.out.println ("Met behulp van @Test (verwacht), zal het tijdens de uitvoering controleren op gespecificeerde uitzondering");​

Zoals hierboven besproken, zal @Test (verwacht) controleren op gespecificeerde uitzondering tijdens de uitvoering, dus methode m8 () zal "No Such Method Exception" genereren. Als gevolg hiervan wordt de test met een uitzondering uitgevoerd.

Aangezien alle testcases zijn geslaagd, resulteert dit in een succesvolle testuitvoering.

Werkelijke resultaat

Aangezien er in het bovenstaande voorbeeld drie testcases zijn, worden alle testcases één voor één uitgevoerd. Zie output hieronder :

Zie onderstaande gedrukte verklaringen die op de console te zien zijn:

Met behulp van @BeforeClass, uitgevoerd vóór alle testgevallen

Gebruik @Before annotaties, uitgevoerd vóór elke testcasus

Met behulp van @After, uitgevoerd na elke testcasus

Gebruik @Before annotaties, uitgevoerd vóór elke testcasus

Met @Test (time-out) kan het worden gebruikt om een ​​time-out af te dwingen in een JUnit4-testcase

Met behulp van @After, uitgevoerd na elke testcasus

Gebruik @Before annotaties, uitgevoerd vóór elke testcasus

Gebruikmakend van @Test (verwacht), zal het tijdens de uitvoering controleren op een gespecificeerde uitzondering

Met behulp van @After, uitgevoerd na elke testcasus

Met @AfterClass, uitgevoerd na alle testgevallen

JUnit Assert Class

Deze klasse biedt een aantal assertiemethoden die handig zijn bij het schrijven van een testcase. Als alle beweringen zijn geslaagd, zijn de testresultaten succesvol. Als een assert-instructie mislukt, zijn de testresultaten mislukt.

Zoals je eerder hebt gezien, beschrijft de onderstaande tabel belangrijke Assert-methoden en beschrijving:

S.No. Methode Omschrijving
1. void assertEquals (boolean verwacht, boolean actueel) Het controleert of twee waarden gelijk zijn aan gelijk aan de methode is gelijk aan de Object-klasse
2. void assertFalse (booleaanse voorwaarde) functionaliteit is om te controleren of een voorwaarde onwaar is.
3. void assertNotNull (Object-object) "assertNotNull" -functionaliteit is om te controleren of een object niet null is.
4. void assertNull (Object-object) "assertNull" -functionaliteit is om te controleren of een object null is.
5. void assertTrue (booleaanse voorwaarde) "assertTrue" -functionaliteit is om te controleren of een voorwaarde waar is.
6. ongeldig mislukken () Als je een assertion-fout wilt genereren, heb je fail () die altijd resulteert in een mislukking.
7. void assertSame ([String bericht] "assertSame" -functionaliteit is om te controleren of de twee objecten naar hetzelfde object verwijzen.
8. void assertNotSame ([String bericht] "assertNotSame" -functionaliteit is om te controleren of de twee objecten niet naar hetzelfde object verwijzen.

JUnit Test Cases Klasse

Om meerdere tests uit te voeren, is de klasse TestCase beschikbaar in org.junit.TestCase- pakketten. Annotatie @Test vertelt JUnit dat deze openbare ongeldige methode (hier Testcase) waaraan deze is gekoppeld, als testcase kan worden uitgevoerd.

De onderstaande tabel toont enkele belangrijke methoden die beschikbaar zijn in de klasse org.junit.TestCase :

S.No. Methode Omschrijving
1. int countTestCases () Deze methode wordt gebruikt om te tellen hoeveel testcases zijn uitgevoerd door de run (TestResult tr) -methode.
2. TestResult createResult () Deze methode wordt gebruikt om een TestResult- object te maken.
3. String getName () Deze methode retourneert een string die niets anders is dan een TestCase .
4. TestResult run () Deze methode wordt gebruikt om een ​​test uit te voeren die een TestResult- object retourneert
5. void run (TestResult-resultaat) Deze methode wordt gebruikt om een ​​test uit te voeren met een TestResult- object dat niets retourneert.
6. void setName (String naam) Deze methode wordt gebruikt om een ​​naam voor een TestCase in te stellen.
7. ongeldig setUp () Deze methode wordt gebruikt om bronassociatiecode te schrijven. bijv. Maak een databaseverbinding.
8. leegte tearDown () Deze methode wordt gebruikt om bronvrijgavecode te schrijven. bijv. Maak de databaseverbinding vrij na het uitvoeren van een transactie.

JUnit TestResult-klasse

Wanneer u een test uitvoert, retourneert deze een resultaat (in de vorm van een TestResult- object). Dit TestResult-object kan worden gebruikt om het resulterende object te analyseren. Dit testresultaat kan mislukken of succesvol zijn. Zie onderstaande tabel voor belangrijke methoden die worden gebruikt in de klasse org.junit.TestResult:
S.No. Methode Omschrijving
1. void addError (Test test, Throwable t) Deze methode wordt gebruikt als u een fout aan de test wilt toevoegen.
2. void addFailure (Test test, AssertionFailedError t) Deze methode wordt gebruikt als u een storing aan de lijst met storingen wilt toevoegen.
3. void endTest (Testtest) Deze methode wordt gebruikt om te melden dat een test is uitgevoerd (voltooid)
4. int errorCount () Deze methode wordt gebruikt om de fout op te sporen tijdens het uitvoeren van de test.
5. Opsomming fouten () Deze methode retourneert eenvoudig een verzameling (opsomming hier) van fouten.
6. int failureCount () Deze methode wordt gebruikt om het aantal fouten te krijgen dat tijdens de testuitvoering is gedetecteerd.
7. void run (TestCase-test) Deze methode wordt gebruikt om een ​​testcase uit te voeren.
8. int runCount () Deze methode telt simpelweg de uitgevoerde test.
9. void startTest (testtest) Deze methode wordt gebruikt om te melden dat er een test is gestart.
10. leegte stop () Deze methode wordt gebruikt om de run te testen die moet worden gestopt.

JUnit Test Suite-klasse

Als u meerdere tests in een bepaalde volgorde wilt uitvoeren, kunt u dit doen door alle tests op één plek te combineren. Deze plaats wordt de testsuites genoemd.

Zie onderstaande tabel voor belangrijke methoden die worden gebruikt in de klasse org.junit.TestSuite :

S.No. Methode Omschrijving
1. void addTest (testtest) Deze methode wordt gebruikt als u een test aan de suite wilt toevoegen.
2. void addTestSuite (Class testClass) Deze methode wordt gebruikt als u de klasse wilt specificeren terwijl u een test aan de suite toevoegt.
3. int countTestCases () Deze methode wordt gebruikt als u het aantal testgevallen wilt tellen.
4. String getName () Deze methode wordt gebruikt om de naam van de testsuite te krijgen.
5. void run (TestResult-resultaat) Deze methode wordt gebruikt om een ​​test uit te voeren en testresultaten te verzamelen in het TestResult- object.
6. void setName (String naam) Deze methode wordt gebruikt om de naam van TestSuite in te stellen .
7. Test testAt (int index) Deze methode wordt gebruikt als u de test op een bepaalde index wilt retourneren.
8. int testCount () Deze methode wordt gebruikt als u een aantal tests in de Suite wilt retourneren.
9. statische testwaarschuwing (tekenreeksbericht) Deze methode retourneert een test die mislukt en een waarschuwingsbericht registreert.

Overzicht:

  • JUnit biedt een draagbare API, die alle belangrijke klassen en annotaties biedt die nuttig zijn bij het schrijven van een unit-test.
  • Lessen die erg handig zijn bij het schrijven van een testcase
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • lijst met belangrijke en vaak gebruikte annotaties

    @Voordat

    @Voor klas

    @Na

    @Na de les

    @Test

    @Negeren