JUnit Test Cases @Before @BeforeClass Annotation

JUnit er den mest populære enhed Test rammer i Java. Det anbefales udtrykkeligt til Enhedstest. JUnit kræver ikke server til test af webapplikation, hvilket gør testprocessen hurtig.

JUnit framework tillader også hurtig og nem generering af testcases og testdata. Det org.Junit pakken består af mange grænseflader og klasser til JUnit Test som Test, Assert, After, Before osv.

Hvad er testarmatur

Før vi forstår, hvad et testarmatur er, lad os studere koden nedenfor

Denne kode er designet til at udføre to testcases på en simpel fil.

public class OutputFileTest {
    private File output; 
    output = new File(...);
    output.delete(); 
public void testFile1(){
        //Code to verify Test Case 1
}
    output.delete();
    output = new File(...);
public void testFile2(){
        //Code to verify Test Case 2
}
 output.delete(); 
}

Lidt problemer her

  • Koden kan ikke læses
  • Koden er ikke nem at vedligeholde.
  • Når testpakken er kompleks, kan koden indeholde logiske problemer.

Sammenlign den samme kode vha JUnit

public class OutputFileTest		
{
    private File output; 
    @Before public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

Koden er langt mere læsbar og vedligeholdelig. Ovenstående kodestruktur er en Test armatur.

Et testarmatur er en kontekst, hvor en JUnit Test sag løber. Typisk inkluderer testarmaturer:

  • Objekter eller ressourcer, der er tilgængelige for enhver testcase.
  • Påkrævede aktiviteter, der gør disse objekter/ressourcer tilgængelige.
  • Disse aktiviteter er
    1. tildeling (setup)
    2. de-allokering (rive ned).

Opsætning og nedtagning

  • Normalt er der nogle gentagne opgaver, der skal udføres forud for hver testcase. Eksempel: oprette en databaseforbindelse.
  • Ligeledes kan der i slutningen af ​​hver testcase være nogle gentagne opgaver. Eksempel: at rydde op, når testudførelsen er overstået.
  • JUnit giver anmærkninger, der hjælper med opsætning og nedtagning. Det sikrer, at ressourcer frigives, og testsystemet er klar til næste testcase.

Disse JUnit annoteringer diskuteres nedenfor-

Opsætning

@Før anmærkning i JUnit bruges på en metode, der indeholder Java kode, der skal køres før hver testcase. dvs. den kører før hver testudførelse.

Nedbrydning (uanset dommen)

@Efter annotation bruges på en metode, der indeholder java-kode til at køre efter hver testcase. Disse metoder vil køre, selvom der er nogen undtagelser i testsagen eller i tilfælde af påstandsfejl.

Bemærk:

  • Det er tilladt at have et hvilket som helst antal annoteringer, der er angivet ovenfor.
  • Alle de metoder, der er kommenteret med @Før in JUnit vil køre før hver testcase, men de kan køre i vilkårlig rækkefølge.
  • Du kan arve @Before og @After metoder fra en superklasse, Execution er som følger: Det er en standard eksekveringsproces i JUnit.
  1. Udfør JUnit @Før metoder i superklassen
  2. Udfør @Before-metoderne i denne klasse
  3. Udfør en @Test-metode i denne klasse
  4. Udfør @After-metoderne i denne klasse
  5. Udfør @After metoderne i superklassen

Eksempel: Oprettelse af en klasse med fil som testarmatur

public class OutputFileTest		
{
    private File output; 
    @Before	public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

I ovenstående eksempel vil udførelseskæden være som følger-

Opsætning og nedtagning

  1. createOutputFile()
  2. testFil1()
  3. sletOutputFile()
  4. createOutputFile()
  5. testFil2()
  6. sletOutputFile()

Antagelse:

testFile1() kører før testFile2()– hvilket ikke er garanteret.

Opsætning kun én gang

  • Det er muligt kun at køre en metode én gang for hele testklassen, før nogen af ​​testene udføres, og før evt. @Før metoder).
  • “Once only setup” er nyttige til at starte servere, åbne kommunikation osv. Det er tidskrævende at lukke og genåbne ressourcer for hver test.
  • Dette kan gøres ved hjælp af anmærkningen @BeforeClass in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

Rive ned én gang

  • I lighed med engangsopsætning er en engangsoprydningsmetode også tilgængelig. Det kører efter alle testcase metoder og @Efter anmærkninger er blevet udført.
  • Det er nyttigt til at stoppe servere, lukke kommunikationslinks osv.
  • Dette kan gøres ved hjælp af @Efter skole anmærkning
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit Test suiter

Hvis vi ø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. Flere detaljer om, hvordan man udfører testpakker, og hvordan det bruges i JUnit vil blive dækket af dette tutorial.

Junit Test Runner

JUnit giver et værktøj til udførelse af dine testcases.

  • JUnitCore klasse bruges til at udføre disse tests.
  • En metode kaldet køre klasser fra org.junit.runner.JUnitkerne, bruges til at køre en eller flere testklasser.
  • Returtype af denne metode er Resultat objekt (org.junit.runner.Result), som bruges til at få adgang til oplysninger om testene. Se følgende kodeeksempel for mere klarhed.
public class Test {				
			public static void main(String[] args) {									
       		Result result = JUnitCore.runClasses(CreateAndSetName.class);					
			for (Failure failure : result.getFailures()) {							
         		System.out.println(failure.toString());					
      }		
      System.out.println(result.wasSuccessful());					
   }		
}      

I ovenstående kode behandles "resultat"-objektet for at få fejl og vellykkede resultater af testsager, vi udfører.

Fornavn JUnit program

Godt kendskab til SDLC, java-programmering og grundlæggende software test processen hjælper med at forstå JUnit program.

Lad os forstå enhedstestning ved hjælp af et levende eksempel. Vi skal oprette en testklasse med en testmetode, der er kommenteret med @Prøve som angivet nedenfor:

MyFirstClassTest.java

package guru99.JUnit;		

import static org.JUnit.Assert.*;				

import org.JUnit.Test;		

public class MyFirstClassTest {				

    @Test		
    public void myFirstMethod(){					
        String str= "JUnit is working fine";					
        assertEquals("JUnit is working fine",str);					
    }
}		

TestRunner.java

For at udføre vores testmetode (ovenfor), skal vi oprette en testløber. I testløberen skal vi tilføje testklasse som parameter i JUnitCores runclasses() metode . Det vil returnere testresultatet, baseret på om testen er bestået eller ikke bestået.

For flere detaljer om dette se koden nedenfor:

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(MyFirstClassTest.class);					
			for (Failure failure : result.getFailures()) {							
              System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

Produktion

Når TestRunner.java udfører vores testmetoder, får vi output som mislykket eller bestået. Find venligst nedenstående outputforklaring:

  1. I dette eksempel efter udførelse MyFirstClassTest.java , prøven er bestået og resultatet er grønt.
  2. Hvis det ville have fejlet, skulle det have vist resultatet som rødt, og fejl kan observeres i fejlsporet. Se nedenunder JUnit gui:

JUnit program output

Resumé

  • JUnit er en ramme, der understøtter flere annoteringer for at identificere en metode, der indeholder en test.
  • JUnit giver en annotation kaldet @Prøve, som fortæller JUnit at den offentlige void-metode, den anvendes i, kan køre som en testcase.
  • Et testarmatur er en kontekst, hvor en testcase kører
  • For at udføre flere tests i en bestemt rækkefølge kan det gøres ved at kombinere alle testene på ét sted. Dette sted kaldes testsuiterne.
  • JUnit giver et værktøj til udførelse af testene, hvor vi kan køre vores testcases kaldet Test Runner.