JUnit Test Cases @Before @BeforeClass Annotatie

Inhoudsopgave:

Anonim

JUnit is het meest populaire framework voor het testen van eenheden in Java. Het wordt expliciet aanbevolen voor Unit Testing. JUnit heeft geen server nodig voor het testen van webapplicaties, waardoor het testproces snel verloopt.

Het JUnit-framework maakt het ook mogelijk om snel en eenvoudig testcases en testgegevens te genereren. Het org.Junit- pakket bestaat uit vele interfaces en klassen voor JUnit Testing zoals Test, Assert, After, Before, etc.

Wat is een testopstelling

Laten we de onderstaande code bestuderen voordat we begrijpen wat een testopstelling is

Deze code is ontworpen om twee testgevallen uit te voeren op een eenvoudig bestand.

openbare klasse OutputFileTest {privé-bestandsuitvoer;output = nieuw bestand (…);output.delete ();openbare ongeldige testFile1 () {// Code om testgeval 1 te verifiëren​output.delete ();output = nieuw bestand (…);openbare ongeldige testFile2 () {// Code om testgeval 2 te verifiëren​output.delete ();​

Enkele problemen hier

  • De code is niet leesbaar
  • De code is niet gemakkelijk te onderhouden.
  • Als de testsuite complex is, kan de code logische problemen bevatten.

Vergelijk dezelfde code met JUnit

openbare klasse OutputFileTest​privé-bestandsuitvoer;@Before openbare ongeldige createOutputFile ()​output = nieuw bestand (…);​@After openbare ongeldige deleteOutputFile ()​output.delete ();​@Test openbare ongeldig testFile1 ()​// code voor testcase-doelstelling​@Test openbare ongeldig testFile2 ()​// code voor testcase-doelstelling​​

De code is veel beter leesbaar en onderhoudbaar. De bovenstaande codestructuur is een testopstelling.

Een testopstelling is een context waarin een testcase wordt uitgevoerd. Typisch zijn testopstellingen:

  • Objecten of bronnen die beschikbaar zijn voor elke testcase.
  • Benodigde activiteiten die deze objecten / middelen beschikbaar stellen.
  • Deze activiteiten zijn
    1. allocatie ( setup )
    2. de-allocatie ( teardown ).

Installatie en demontage

  • Gewoonlijk zijn er enkele herhaalde taken die voorafgaand aan elke testcase moeten worden uitgevoerd. Voorbeeld: maak een databaseverbinding.
  • Evenzo kunnen er aan het einde van elke testcase enkele herhaalde taken zijn. Voorbeeld: opschonen zodra de testuitvoering voorbij is.
  • JUnit biedt annotaties die helpen bij het instellen en verwijderen. Het zorgt ervoor dat bronnen worden vrijgegeven en dat het testsysteem gereed is voor de volgende testcase.

Deze annotaties worden hieronder besproken-

Opstelling

@Before annotatie wordt gebruikt op een methode die Java-code bevat die vóór elke testcase moet worden uitgevoerd. dwz het wordt uitgevoerd voor elke testuitvoering.

Teardown (ongeacht het vonnis)

@After annotation wordt gebruikt op een methode die Java-code bevat om na elke testcase uit te voeren. Deze methoden werken zelfs als er uitzonderingen worden gemaakt in de testcase of in het geval van mislukte beweringen.

Notitie:

  • Het is toegestaan ​​om een ​​willekeurig aantal hierboven vermelde annotaties te hebben.
  • Alle methoden die zijn geannoteerd met @Before , worden vóór elke testcase uitgevoerd, maar ze kunnen in willekeurige volgorde worden uitgevoerd.
  • U kunt de methoden @Before en @After erven van een superklasse, Uitvoering is als volgt: Het is een standaarduitvoeringsproces in JUnit.
  1. Voer de @Before-methoden uit in de superklasse
  2. Voer de @Before-methoden in deze klasse uit
  3. Voer een @Test-methode uit in deze klasse
  4. Voer de @After-methoden in deze klasse uit
  5. Voer de @After-methoden uit in de superklasse

Voorbeeld: een klasse maken met een bestand als testopstelling

openbare klasse OutputFileTest​privé-bestandsuitvoer;@Before openbare ongeldige createOutputFile ()​output = nieuw bestand (…);​@After openbare ongeldige deleteOutputFile ()​output.delete ();​@Test openbare ongeldig testFile1 ()​// code voor testcase-doelstelling​@Test openbare ongeldig testFile2 ()​// code voor testcase-doelstelling​​

In het bovenstaande voorbeeld is de uitvoeringsketen als volgt:

  1. createOutputFile ()
  2. testFile1 ()
  3. deleteOutputFile ()
  4. createOutputFile ()
  5. testFile2 ()
  6. deleteOutputFile ()

Aanname: testFile1 () wordt uitgevoerd vóór testFile2 () - wat niet gegarandeerd is.

Eenmalige installatie

  • Het is mogelijk om een ​​methode slechts één keer uit te voeren voor de hele testklasse voordat een van de tests wordt uitgevoerd, en voorafgaand aan een @Before- methode (n).
  • "Eenmalige installatie" is handig voor het starten van servers, het openen van communicatie, enz. Het is tijdrovend om bronnen voor elke test te sluiten en opnieuw te openen.
  • Dit kan worden gedaan met de annotatie @BeforeClass
@BeforeClass public static void Method_Name () {// class setup code hier​

Eenmalig afbreken

  • Net als bij eenmalige installatie is er ook een eenmalige opschoningsmethode beschikbaar. Het werkt nadat alle testcase-methoden en @After- annotaties zijn uitgevoerd.
  • Het is handig om servers te stoppen, communicatieverbindingen te sluiten, enz.
  • Dit kan worden gedaan met behulp van de annotatie @AfterClass
@AfterClass public static void Method_Name ()​// class opschoningscode hier​

JUnit Test Suites

Als we meerdere tests in een bepaalde volgorde willen uitvoeren, kan dit door alle tests op één plek te combineren. Deze plaats wordt de testsuites genoemd. Meer details over het uitvoeren van testsuites en hoe deze in JUnit worden gebruikt, worden in deze tutorial behandeld.

Junit Test Runner

JUnit biedt een tool voor het uitvoeren van uw testcases.

  • De klasse JUnitCore wordt gebruikt om deze tests uit te voeren.
  • Een methode genaamd runClasses, geleverd door org.junit.runner.JUnitCore, wordt gebruikt om een ​​of meer testklassen uit te voeren.
  • Het retourtype van deze methode is het Result- object ( org.junit.runner.Result ), dat wordt gebruikt om toegang te krijgen tot informatie over de tests. Zie het volgende codevoorbeeld voor meer duidelijkheid.
openbare klas Test {public static void main (String [] args) {Resultaat resultaat = JUnitCore.runClasses (CreateAndSetName.class);voor (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());​System.out.println (result.wasSuccessful ());​​

In bovenstaande code wordt het "resultaat" -object verwerkt om fouten en succesvolle uitkomsten te krijgen van testgevallen die we uitvoeren.

Eerste JUnit-programma

Eerlijke kennis van SDLC, Java-programmering en basisprincipes van het softwaretestproces helpt bij het begrijpen van het JUnit-programma.

Laten we Unit Testing begrijpen aan de hand van een live voorbeeld. We moeten een testklasse maken met een testmethode die is geannoteerd met @Test, zoals hieronder wordt weergegeven:

MyFirstClassTest.java

pakket guru99.JUnit;importeer statische org.JUnit.Assert. *;importeer org.JUnit.Test;openbare klasse MyFirstClassTest {@Testopenbare leegte myFirstMethod () {String str = "JUnit werkt prima";assertEquals ("JUnit werkt prima", str);​​

TestRunner.java

Om onze testmethode (hierboven) uit te voeren, moeten we een testrunner maken. In de testrunner moeten we testklasse toevoegen als parameter in de runclasses () -methode van JUnitCore. Het zal het testresultaat retourneren, op basis van het feit of de test is geslaagd of mislukt.

Zie de onderstaande code voor meer informatie hierover:

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

Uitvoer

Zodra TestRunner.java onze testmethoden heeft uitgevoerd, krijgen we de uitvoer als mislukt of geslaagd. Hieronder vindt u uitleg over de uitvoer:

  1. In dit voorbeeld, na het uitvoeren van MyFirstClassTest.java , is de test geslaagd en is het resultaat groen.
  2. Als het zou zijn mislukt, had het resultaat als rood moeten worden weergegeven en kan het mislukken worden waargenomen in het opsporen van fouten. Zie hieronder JUnit gui:

Samenvatting :

  • JUnit is een raamwerk dat verschillende annotaties ondersteunt om een ​​methode te identificeren die een test bevat.
  • JUnit biedt een annotatie met de naam @Test, die de JUnit vertelt dat de public void-methode waarin het wordt gebruikt, kan worden uitgevoerd als een testcase.
  • Een testopstelling is een context waarin een testcase loopt
  • Om meerdere tests in een bepaalde volgorde uit te voeren, kan dit worden gedaan door alle tests op één plek te combineren. Deze plaats wordt de testsuites genoemd.
  • JUnit biedt een tool voor het uitvoeren van de tests waarbij we onze testcases kunnen uitvoeren, genaamd Test Runner.