JUnit Annotaties Tutorial met voorbeeld: Wat is @Test en @After

Wat is JUnit annotaties?

JUnit Annotaties is een speciale vorm van syntactische metadata waaraan kan worden toegevoegd Java broncode voor betere leesbaarheid en structuur van de code. Variabelen, parameters, pakketten, methoden en klassen kunnen worden geannoteerd. Annotaties werden geïntroduceerd in Junit4, wat Java code leesbaarder en eenvoudiger. Dit is het grote verschil tussen Junit3 en Junit4: Junit4 is gebaseerd op annotaties.

Met de kennis van annotaties in Junit5 kan men eenvoudig een JUnit test. Hieronder vindt u de belangrijkste en meest gebruikte JUnit annotatielijst:

S.No. Annotaties Beschrijving
1. @Toets Deze annotatie is een vervanging van org.junit.TestCase, wat aangeeft dat de openbare void-methode waaraan deze is gekoppeld, kan worden uitgevoerd als een testcase.
2. @Voor Deze annotatie wordt gebruikt als u vóór elke testcase een instructie wilt uitvoeren, zoals precondities.
3. @Voor klas Deze annotatie wordt gebruikt als u bepaalde instructies wilt uitvoeren voordat alle testgevallen zijn uitgevoerd. De testverbinding moet bijvoorbeeld vóór alle testgevallen worden uitgevoerd.
4. @Na Deze annotatie kan worden gebruikt als u na elke instructie enkele instructies wilt uitvoeren Testgeval voor bijvoorbeeld het resetten van variabelen, het verwijderen van tijdelijke bestanden, variabelen, enz.
5. @Na de les Deze annotatie kan worden gebruikt als u na alle testgevallen enkele instructies wilt uitvoeren, bijvoorbeeld voor het vrijgeven van bronnen na het uitvoeren van alle testgevallen.
6. @Negeer Deze annotatie kan worden gebruikt als u bepaalde instructies tijdens de testuitvoering wilt negeren, bijvoorbeeld door bepaalde testgevallen uit te schakelen tijdens de testuitvoering.
7. @Test(time-out=500) Deze annotatie kan worden gebruikt als u een time-out wilt instellen tijdens de testuitvoering, bijvoorbeeld als u onder een SLA (Service Level Agreement) werkt en tests binnen een bepaalde tijd moeten worden voltooid.
8. @Test(expected=IllegalArgumentException.class) Deze annotatie kan worden gebruikt als u een uitzondering wilt afhandelen tijdens de uitvoering van de test. Bijvoorbeeld als u wilt controleren of een bepaalde methode de opgegeven uitzondering genereert of niet.

JUnit Annotaties Voorbeeld

Laten we een klasse maken die belangrijk omvat JUnit annotaties met eenvoudige printinstructies en voer deze uit met een testrunner-klasse:

Stap 1) Beschouw de onderstaande Java-klasse met verschillende methoden die zijn gekoppeld aan bovengenoemde annotaties:

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");					

    }		

}		

Stap 2) laten we een testrunnerklasse maken om bovenstaande test uit te voeren:

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());							
   }		
}      	

verwacht resultaat

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

Laten we de testgevallen die in de bovenstaande Java-klasse worden gebruikt in detail analyseren:

  1. Beschouw methode m5() zoals hieronder weergegeven:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

In de bovenstaande methode voeg je een string toe aan de variabele "lijst".

  • lijst.isEmpty() zal vals retourneren.
  • assertFalse(lijst.isEmpty()) moet waar terugkeren.
  • Als gevolg hiervan zal de testcase dat wel doen passeren.

Omdat u slechts één string aan de lijst heeft toegevoegd, is de grootte dus één.

  • lijst.grootte() moet de int-waarde retourneren als “1” .
  • So assertEquals(1, lijst.grootte()) moet waar terugkeren.
  • Als gevolg hiervan zal de testcase dat wel doen passeren.
  1. Beschouw methode m7() zoals hieronder weergegeven:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

Zoals hierboven besproken @Test(time-out = 10)annotatie wordt gebruikt om een ​​time-out in de testcase af te dwingen.

  1. Beschouw methode m8() zoals hieronder weergegeven:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

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

Doordat alle testgevallen zijn doorstaan, resulteert dit in een succesvolle testuitvoering.

Werkelijke resultaat

Omdat er in het bovenstaande voorbeeld drie testgevallen zijn, worden alle testgevallen één voor één uitgevoerd. Zie onderstaande uitvoer:

JUnit Annotaties Voorbeeld
JUnit Annotaties Voorbeeld

Zie onderstaande printverklaringen die op de console te zien zijn:

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

Met behulp van @Before-annotaties, uitgevoerd vóór elke testcase

Met behulp van @After, uitgevoerd na elke testcase

Met behulp van @Before-annotaties, uitgevoerd vóór elke testcase

Met behulp van @Test(timeout) kan dit worden gebruikt om een ​​time-out af te dwingen JUnitTestcase uit 4

Met behulp van @After, uitgevoerd na elke testcase

Met behulp van @Before-annotaties, uitgevoerd vóór elke testcase

Met behulp van @Test(expected) wordt tijdens de uitvoering gecontroleerd op gespecificeerde uitzonderingen

Met behulp van @After, uitgevoerd na elke testcase

Met behulp van @AfterClass, uitgevoerd na alle testgevallen

JUnit Beweer klasse

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

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

S.No. Methode Beschrijving
1. void assertEquals(boolean verwacht, boolean feitelijk) Het controleert of twee waarden gelijk zijn, vergelijkbaar met de equals-methode van de objectklasse
2. void assertFalse(booleaanse voorwaarde) functionaliteit is om te controleren of een voorwaarde onwaar is.
3. void assertNotNull(objectobject) De “assertNotNull”-functionaliteit is om te controleren of een object niet nul is.
4. void assertNull(objectobject) De “assertNull”-functionaliteit is om te controleren of een object nul is.
5. void assertTrue(booleaanse voorwaarde) De “assertTrue”-functionaliteit is om te controleren of een voorwaarde waar is.
6. ongeldig mislukt() Als je een beweringsfout wilt genereren, heb je fail() die altijd resulteert in een mislukt oordeel.
7. void assertSame([String bericht] De “assertSame”-functionaliteit is om te controleren of de twee objecten naar hetzelfde object verwijzen.
8. void assertNotSame([String bericht] De “assertNotSame”-functionaliteit is om te controleren of de twee objecten niet naar hetzelfde object verwijzen.

JUnit Testgevallenklasse

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

Onderstaande tabel toont enkele belangrijke methoden die beschikbaar zijn in org.junit.TestCase klasse:

S.No. Methode Beschrijving
1. int countTestCases() Deze methode wordt gebruikt om te tellen hoeveel testgevallen zijn uitgevoerd run(TestResultaat tr) methode.
2. TestResultaat createResult() Deze methode wordt gebruikt om een Testresultaat voorwerp.
3. String getName () Deze methode retourneert een string die niets anders is dan a Testcase.
4. TestResultaat uitvoeren() Deze methode wordt gebruikt om een ​​test uit te voeren die a retourneert Testresultaat object
5. ongeldige run (TestResultaat resultaat) Deze methode wordt gebruikt om een ​​test uit te voeren met een Testresultaat object dat niets retourneert.
6. void setName (String naam) Deze methode wordt gebruikt om een ​​naam in te stellen voor a Testcase.
7. ongeldige setUp() Deze methode wordt gebruikt om bronkoppelingscode te schrijven. Maak bijvoorbeeld een databaseverbinding.
8. leegte tearDown() Deze methode wordt gebruikt om code voor het vrijgeven van bronnen te schrijven. Bijvoorbeeld het vrijgeven van de databaseverbinding na het uitvoeren van een transactiebewerking.

JUnit TestResultaat-klasse

Wanneer u een test uitvoert, retourneert deze een resultaat (in de vorm van Testresultaat voorwerp). Dit TestResult-object kan worden gebruikt om het resulterende object te analyseren. Dit testresultaat kan zowel mislukt als succesvol zijn.

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

S.No. Methode Beschrijving
1. void addError(Testtest, Throwable t) Deze methode wordt gebruikt als u een fout aan de test wilt toevoegen.
2. void addFailure(Testtest, AssertionFailedError t) Deze methode wordt gebruikt als u een fout aan de lijst met fouten 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 tijdens de testuitvoering te detecteren.
5. Opsomming fouten() Deze methode retourneert eenvoudigweg een verzameling (opsomming hier) fouten.
6. int mislukkingCount() Deze methode wordt gebruikt om het aantal fouten te achterhalen dat tijdens de testuitvoering is gedetecteerd.
7. ongeldige run (TestCase-test) Deze methode wordt gebruikt om een ​​testcase uit te voeren.
8. int runCount() Deze methode telt eenvoudigweg de uitgevoerde test.
9. void startTest(Testtest) Deze methode wordt gebruikt om te melden dat een test is gestart.
10. ongeldige stop() Deze methode wordt gebruikt om het proefdraaien te stoppen.

JUnit Suiteklasse testen

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 org.junit.TestSuite klasse:

S.No. Methode Beschrijving
1. void addTest(Testtest) Deze methode wordt gebruikt als u een test aan de suite wilt toevoegen.
2. void addTestSuite(Klasse testKlasse) Deze methode wordt gebruikt als u de klasse wilt opgeven 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 achterhalen.
5. ongeldige run (TestResultaat resultaat) Deze methode wordt gebruikt om een ​​test uit te voeren en de testresultaten te verzamelen Testresultaat voorwerp.
6. void setName (String naam) Deze methode wordt gebruikt om de naam in te stellen van Test pak.
7. Test testAt(int-index) Deze methode wordt gebruikt als u de test op een bepaalde index wilt retourneren.
8. int testAantal() Deze methode wordt gebruikt als u een aantal tests in de Suite wilt retourneren.
9. statische testwaarschuwing (stringbericht) Deze methode retourneert een test die mislukt en er wordt een waarschuwingsbericht geregistreerd.

Samenvatting

  • JUnit biedt een draagbare API, die alle belangrijke klassen en Selenium annotaties die nuttig zijn bij het schrijven van een eenheidstest.
  • Lessen die erg handig zijn bij het schrijven van een testcase
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • Belangrijk en vaak gebruikt JUnit annotaties lijst@Voor@BeforeClass@Na

    @Na de les

    @Toets

    @Negeren