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 stoppeping servere, lukning af kommunikationsforbindelser 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, burde det have vist resultatet som rรธdt, og fejl kan observeres ved fejl trace. Se nedenfor 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.

Opsummer dette indlรฆg med: