Huis Persoonlijke financiën Gebruiken met JUnit - dummies

Gebruiken met JUnit - dummies

Inhoudsopgave:

Video: Java - JUnit testing in Eclipse 2024

Video: Java - JUnit testing in Eclipse 2024
Anonim

JUnit is een gestandaardiseerd raamwerk voor het testen van Java-eenheden (dat wil zeggen, Java-klassen). JUnit kan worden geautomatiseerd om een ​​deel van het werk uit de test te halen.

Stel u voor dat u een enum-type hebt gemaakt met drie waarden: GROEN, GEEL en ROOD. Listing 1 bevat de code:

Listing 1

public enum SignalColor {GREEN, YELLOW, RED}

Een verkeerslicht heeft een status (wat een mooie naam is voor de kleur van het verkeerslicht).

Verkeerslicht in openbare klasse {SignalColor state = SignalColor. ROOD;

Als u de huidige staat van het verkeerslicht kent, kunt u beslissen wat de volgende status van het verkeerslicht zal zijn.

public void nextState () {switch (state) {case RED: state = SignalColor. GROEN; breken; geval GEEL: state = SignalColor. ROOD; breken; case GREEN: state = SignalColor. GEEL; breken; standaard: state = SignalColor. ROOD; break;}}

U kunt de status van het verkeerslicht ook een aantal keren wijzigen:

openbare ongeldige wijziging (int numberOfTimes) {for (int i = 0; i 

Alles bij elkaar opgeteld, hebt u de TrafficLight-klasse in Listing 2.

Listing 2

public class TrafficLight {SignalColor state = SignalColor. ROOD; public void nextState () {switch (state) {case RED: state = SignalColor. GROEN; breken; geval GEEL: state = SignalColor. ROOD; breken; case GREEN: state = SignalColor. GEEL; breken; standaard: state = SignalColor. ROOD; break;}} openbare ongeldige wijziging (int numberOfTimes) {for (int i = 0; i 

In de oudheid bent u misschien doorgegaan met het schrijven van code, het maken van meer klassen, de volgende status aanroepen en de methoden in listing 2 wijzigen. Daarna, na enkele maanden coderen, zou u pauzeren om uw werk te testen.

En wat een verrassing! Uw tests zouden jammerlijk mislukken! U moet het testen nooit langer dan een dag of twee uitstellen. Test vroeg en test vaak!

Eén filosofie over testen zegt dat je elk stuk code moet testen zodra je het hebt geschreven. Natuurlijk klinkt de zin "stuk code" niet erg wetenschappelijk. Het zou niet nodig zijn als ontwikkelaars rondliepen om te praten over de 'stukjes code testen' die ze vanmiddag hebben gedaan. Het is beter om elk stuk code een -eenheid te noemen, en ontwikkelaars te laten praten over unit testing .

De meest gebruikte testeenheid is een klasse. Dus een typische Java-ontwikkelaar test elke klasse zodra de code van de klasse is geschreven.

Dus hoe ga je over het testen van een klas? Een beginneling kan de klasse TrafficLight testen door een extra klasse te schrijven - een klasse met een hoofdmethode. De hoofdmethode maakt een instantie van TrafficLight, roept de nextState aan en wijzigt methoden en geeft de resultaten weer.De beginneling onderzoekt de resultaten en vergelijkt deze met enkele verwachte waarden.

Nadat de belangrijkste methoden voor tientallen, honderden of zelfs duizenden klassen zijn geschreven, raakt de beginner (nu een volwaardige ontwikkelaar) de testroutine beu en zoekt hij naar manieren om de testprocedure te automatiseren. Moe of niet, een ontwikkelaar kan proberen de handgecodeerde tests van een andere ontwikkelaar te ontcijferen. Zonder normen of richtlijnen te hebben voor het samenstellen van tests, kan het lezen en begrijpen van de tests van een andere ontwikkelaar moeilijk en vervelend zijn.

Dus JUnit komt te hulp!.

Ga als volgt te werk om te achterhalen hoe Eclipse het gebruik van JUnit automatiseert:

  1. Maak een Eclipse-project met vermeldingen 1 en 2.

  2. Klik in Windows met de rechtermuisknop op het TrafficLight van de Package Explorer. java branch. Op een Mac, control-klik op TrafficLight van de Package Explorer. java branch.

    Er verschijnt een contextmenu.

  3. Selecteer in het contextmenu de optie Nieuw → JUnit-testcase. Als gevolg hiervan wordt het dialoogvenster Nieuwe JUnit-testcase weergegeven.

    Klik op Volgende onderaan het dialoogvenster Nieuwe JUnit-testcase.

  4. Als gevolg hiervan ziet u de tweede pagina van het dialoogvenster Nieuwe JUnit-testcase. De tweede pagina bevat methoden die (direct of indirect) toebehoren aan de klasse TrafficLight.

    Plaats een vinkje in het selectievakje met het label Verkeerslicht. Als resultaat plaatst Eclipse vinkjes in de selectievakjes

  5. nextState ()

    en wijzigen (int) . Klik op Voltooien aan de onderkant van het dialoogvenster Nieuwe JUnit-testcase. JUnit is geen formeel onderdeel van Java. In plaats daarvan wordt een eigen set klassen en methoden geleverd om u te helpen bij het maken van tests voor uw code. Nadat u op Voltooien hebt geklikt, vraagt ​​Eclipse u of u de JUnit-klassen en -methoden wilt opnemen als onderdeel van uw project.

  6. Selecteer Voer de volgende actie uit en voeg JUnit 4-bibliotheek toe aan het buildpad. Klik vervolgens op OK.

    Eclipse sluit de dialoogvensters en uw project heeft een gloednieuwe TrafficLightTest. java-bestand. De code van het bestand wordt getoond in Listing 3.

  7. De code in Listing 3 bevat twee tests en beide tests bevatten aanroepen van een onaangenaam klinkende fail-methode. Eclipse wil dat je code toevoegt om deze tests te laten slagen.

    Verwijder de oproepen naar de fail-methode. In plaats van de mislukte methode-oproepen typt u de vetgedrukte code in listing 4.

    Klik in de Package Explorer met de rechtermuisknop (in Windows) of houd Control ingedrukt en klik (op een Mac) op de TrafficLightTest. java branch. Selecteer Run As → JUnit Test in het resulterende contextmenu.

  8. Eclipse heeft mogelijk meer dan één soort JUnit-testraamwerk in petto. Als dit het geval is, ziet u mogelijk een dialoogvenster zoals hieronder. Als dat het geval is, selecteert u de Eclipse JUnit Launcher en klikt u vervolgens op OK. Als resultaat hiervan voert Eclipse uw TrafficLightTest uit. Java-programma. Eclipse geeft het resultaat van de run weer voor zijn eigen Package Explorer. Het resultaat toont geen fouten en geen fouten. Oef!

  9. Listing 3

    statische org. Importeren junit. Doen gelden. *; import org. junit. Test; public class TrafficLightTest {@Test public void testNextState () {fail ("Nog niet geïmplementeerd");} @Test public void testChange () {fail ("Nog niet geïmplementeerd");}}

    Listing 4

import statische org.junit. Doen gelden. *; import org. junit. Test; public class TrafficLightTest {@Test public void testNextState () {

TrafficLight light = new TrafficLight ();

assertEquals (SignalColor, RODE, lichte toestand);

licht. nextState (); assertEquals (SignalColor, GROEN, lichte toestand); licht. nextState (); assertEquals (SignalColor, GEEL, lichte toestand); licht. nextState (); assertEquals (SignalColor, RODE, lichte toestand); } @Test public void testChange () { TrafficLight light = new TrafficLight (); licht. change (5); assertEquals (SignalColor, GEEL, lichte toestand); }} Wanneer u Run As → JUnit Test selecteert, zoekt Eclipse niet naar een hoofdmethode. In plaats daarvan zoekt Eclipse naar methoden die beginnen met @Test en andere dergelijke dingen. Eclipse voert elk van de @ Test-methoden uit. Dingen als @Test zijn Java -annotaties

Listing 4 bevat twee @Test-methoden: testNextState en testChange. Met de methode testNextState wordt de methode TrafficLight nextState op de proef gesteld. Op dezelfde manier buigt de testChange-methode de spieren van de TrafficLight-verandermethode. Overweeg de code in de testNextState-methode. De methode testNextState roept herhaaldelijk de nextState-methode van de klasse TrafficLight en de assertEquals-methode van JUnit aan. De assertEquals-methode neemt twee parameters in beslag: een verwachte waarde en een werkelijke waarde. In de bovenste assertEquals-aanroep is de verwachte waarde SignalColor. ROOD. U verwacht dat het verkeerslicht ROOD is, omdat u in Listing 2 de staat van het licht initialiseert met de waarde SignalColor. ROOD.

In de bovenste assertEquals-aanroep is de werkelijke waarde gering. staat (de kleur die feitelijk is opgeslagen in de statusvariabele van het verkeerslicht).

Als de werkelijke waarde gelijk is aan de verwachte waarde, wordt de aanroep om assertEquals door te geven en gaat JUnit verder met het uitvoeren van de instructies in de testNextState-methode.

  • Maar als de werkelijke waarde afwijkt van de verwachte waarde, mislukken de assertEquals en wordt de fout weergegeven in het resultaat van de run. Overweeg bijvoorbeeld wat er gebeurt als u de verwachte waarde in de eerste assertEquals-aanroep in Listing 4 wijzigt:

  • @Test openbare-leegte-testNextState () {TrafficLight light = new TrafficLight (); assertEquals (SignalColor, GEEL, lichte toestand);

Direct na de constructie is de kleur van een verkeerslicht ROOD en niet GEEL. De testNextState-methode bevat dus een valse bewering en het resultaat van Run As → JUnit ziet eruit als de slechte rapportkaart van een kind.

TestNextState hebben vóór testWijziging in listing 4

garandeert niet

dat JUnit testNextState uitvoert voordat testChange wordt uitgevoerd. Als je drie @Test-methoden hebt, kan JUnit ze van de laagste naar de onderste uitvoeren, van onderste naar bovenste, van de middelste naar de bovenste tot de onderste, of in willekeurige volgorde. JUnit kan zelfs halverwege een test pauzeren om delen van een andere test uit te voeren. Daarom moet u nooit aannames doen over de uitkomst van één test als u nog een test schrijft.

Mogelijk wilt u dat bepaalde instructies worden uitgevoerd voordat een van de tests begint.Als u dat doet, plaatst u deze instructies in een methode met de naam setUp en gebruikt u die methode vooraf met een @Before-annotatie. (Zie het setUp () selectievakje in de afbeelding bij stap 3 in listing 2 hierboven.)

Hier is nieuws: Niet alle assertEquals-methoden zijn hetzelfde! Stel je voor dat je een Driver-klasse toevoegt aan de code van je project. "Stuurprogrammaklasse" betekent niet een printerstuurprogramma of een hei-stuurprogramma. Het betekent een persoon die in een auto rijdt - een auto die je verkeerslicht nadert. Zie Listing 5. Listing 5 public class Driver {public double velocity (TrafficLight light) {switch (light state) {case RED: return 0. 0; geval GEEL: retourneert 10. 0; geval GROEN: terug 30. 0; standaard: retourneer 0. 0;}}}

Als het lampje rood is, is de snelheid van de bestuurder 0. 0. Als het lampje geel is, vertraagt ​​de auto naar een veilige 10. 0. Als het lampje groen is, de auto cruises met een snelheid van 30. 0.

(in dit voorbeeld, de eenheden van snelheid doen er niet toe.) Ze kunnen worden mijl per uur, kilometers per uur, of wat dan ook. De enige manier waarop het van belang is als de auto is in Boston of New York City. In dat geval moet de snelheid voor GEEL veel hoger zijn dan de snelheid voor GROEN, en de snelheid voor ROOD mag niet 0. 0 zijn.)

JUnit-tests maken voor de Stuurprogrammaklasse, volg de stappen 1 t / m 9 die eerder in dit artikel zijn vermeld, maar zorg ervoor dat u de volgende wijzigingen aanbrengt:

Klik in stap 2 met de rechtermuisknop of houd Control ingedrukt terwijl u op het stuurprogramma klikt. java branch in plaats van de TrafficLight. java branch.

Plaats in stap 5 een vinkje in de stuurprogrammatak.

Verwijder bij Stap 8 de aanroepwijzigingen voor de fail-methode om de klasse DriverTest te maken die wordt weergegeven in Listing 6. (De code die u typt, wordt vetgedrukt weergegeven.)

  • Listing 6

  • statische org. Importeren. junit. Doen gelden. *; import org. junit. Test; public class DriverTest {@Test public void testVelocity () {

  • TrafficLight light = new TrafficLight ();

licht. change (7);

Stuurprogramma stuurprogramma = nieuw stuurprogramma (); assertEquals (30, 0, stuurprogramma.snelheid (licht), 0. 1); }} Als alles goed gaat, gaat de JUnit-test met vlag en wimpel voorbij. (Om preciezer te zijn, de JUnit past met de kleur groen!) Dus het uitvoeren van DriverTest is niet nieuw of opwindend. Wat zo spannend is, is de aanroep tot assertEquals in listing 6. Wanneer u twee dubbele waarden in een Java-programma vergelijkt, hebt u niet het recht om gelijkheid op de neus te verwachten. Dat wil zeggen, een van de dubbele waarden zou kunnen zijn 30. 000000000, terwijl de andere dubbele waarde dichter bij 30 ligt. 000000001. Een computer heeft slechts 64 bits om elke dubbele waarde op te slaan, en onnauwkeurigheden kruipen hier en daar in. Dus in JUnit heeft de assertEquals-methode voor het vergelijken van dubbele waarden een derde parameter. De derde parameter geeft de speelruimte weer. In listing 6 staat de instructie

assertEquals (30, 0, stuurprogramma.snelheid (licht), 0. 1);

zegt het volgende: "Beweer dat de werkelijke waarde van de bestuurder. snelheid (licht) ligt binnen 0. 1 van de verwachte waarde 30. 0. Als dat zo is, gaat de bewering voorbij. Zo niet, dan faalt de bewering. "

Wanneer u assertEquals callt voor dubbele waarden, kan het lastig zijn om een ​​goede foutenmarge te selecteren.Deze cijfers illustreren de soorten dingen die fout kunnen gaan.

Hier is uw foutmarge te klein.

Daar is uw foutmarge te groot.

Gelukkig is in dit voorbeeld van DriverTest de marge 0. 1 een zeer veilige gok. Dit is waarom:

Als de assertEquals-test mislukt, mislukt deze met veel meer dan 0. 1.

Falen betekent een stuurprogramma hebben. snelheidswaarde (licht) zoals 0. 0 of 10. 0.

In dit voorbeeld, als de assertEquals-test slaagt, staat dit waarschijnlijk voor complete gelijkheid op de neus.

  • De waarde van de bestuurder. velocity (light) komt rechtstreeks van de return 30. 0 code in Listing 5. Er is geen rekenkunde bij betrokken. Dus de waarde van de bestuurder. snelheid (licht) en de verwachte 30. 0 waarde moet exact hetzelfde zijn (of bijna exact hetzelfde).

Gebruiken met JUnit - dummies

Bewerkers keuze

Hoe u Flash-video maakt en codeert - dummies

Hoe u Flash-video maakt en codeert - dummies

Als de pagina's die u maakt, zijn gewonnen ' t kan worden bekeken op mobiele apparaten (zoals een iPad of een smartphone), kunt u webpagina's maken met prachtige Flash-video. Adobe Flash Professional CS6 heeft een eigen ingebouwde video-encoder. Full-motionvideo in Flash is iets heel moois. U past de video aan voor het bekijken door de doelgroep ...

Hoe een aanpasbare interface te maken in CSS3 - dummies

Hoe een aanpasbare interface te maken in CSS3 - dummies

De grote variëteit en soorten schermen gebruikt om informatie weer te geven, maakt het nodig dat uw CSS3-commando's de gebruiker toestaan ​​om het formaat van de elementen naar wens aan te passen. In de meeste gevallen kunt u de gebruiker eenvoudig toestaan ​​om het element op elke gewenste grootte te maken. Er kunnen zich echter situaties voordoen waarin u de grootte van de grootte moet controleren ...

Hoe u een eenvoudige tabel op uw webpagina maakt - dummies

Hoe u een eenvoudige tabel op uw webpagina maakt - dummies

Tabellen laten u organiseer informatie op uw webpagina en geef het een georganiseerde uitstraling die uw bezoekers nuttig zullen vinden. Bij gebruik zoals bedoeld, hebben tabellen rijen en kolommen. Voor elke spot waar een rij en kolom elkaar kruisen, hebt u een tabelcel. Elke cel kan zijn eigen opmaak hebben: de gegevens erin ...

Bewerkers keuze

Hoe Postproduction Shareninging Filters werken - dummies

Hoe Postproduction Shareninging Filters werken - dummies

Verscherpingsfilters werken in postproductie door de randen (of aangrenzende gebieden met tonaal contrast) te benadrukken aan elkaar) in een afbeelding. Ze creëren een fijne highlight aan de donkere kant van de rand en een piepklein lowlight aan de lichtere kant van de rand. Dit toegevoegde contrast zorgt ervoor dat de randen er scherper uitzien vanaf een ...

HDR Work-Flow voor foto's met één belichting - dummies

HDR Work-Flow voor foto's met één belichting - dummies

In grote lijnen, enkele belichting hoog dynamisch bereik volgt dezelfde workflow als HDR-fotografie tussen haakjes. Er kunnen kleine verschillen zijn, dus hier is een overzicht van de werkstroom: configureer uw camera voor single-shot HDR. Het enige dat u zoekt, is de beste foto die u kunt maken. Besteed aandacht aan de lichtomstandigheden, het onderwerp, beweging en ...

Geavanceerde compacte en superzoomcamera's voor HDR-fotografie - dummies

Geavanceerde compacte en superzoomcamera's voor HDR-fotografie - dummies

Stap omhoog van compacte digitale camera's binnen het budgetbereik, vindt u duurdere compacte digitale camera's voor HDR-fotografie, ook wel high-end compacts, superzoomlenzen en dSLR-look-alikes genoemd. Er zijn zoveel vaak overlappende categorieën dat het je hoofd laat draaien. De twee dingen die deze reeks camera's gemeen hebben, zijn hun ...

Bewerkers keuze

In te schakelen Class Tracking in QuickBooks 2013 - dummies

In te schakelen Class Tracking in QuickBooks 2013 - dummies

Om activity-based costing te gebruiken (ABC ) in QuickBooks 2013 moet u de QuickBooks Class Tracking-functie inschakelen. Met Class Tracking kunt u inkomsten- en onkostentransacties categoriseren als niet alleen vallen in inkomsten- en uitgavenrekeningen, maar ook als vallen in bepaalde klassen. Volg deze stappen om Class Tracking in QuickBooks in te schakelen: Kies Bewerken → Voorkeuren ...

Gebruikt om een ​​exemplaar van een QuickBooks-gegevensbestand te gebruiken - dummies

Gebruikt om een ​​exemplaar van een QuickBooks-gegevensbestand te gebruiken - dummies

Ongeacht of de client verzendt handmatig een accountantskopie van een QuickBooks-gegevensbestand, e-mails een accountantsexemplaar, of verzendt een accountantskopie via de Intuit-bestandsoverdrachtservice, u gebruikt de kopie van de accountant door Bestand → Verzend bedrijfsdossier → Accountantskopie → Open & converteer overzetten te kiezen Bestand commando. Wanneer u deze opdracht kiest, geeft QuickBooks een ...

Hoe Audit Trails te gebruiken in QuickBooks - dummies

Hoe Audit Trails te gebruiken in QuickBooks - dummies

Als u besluit om meerdere gebruikers toegang te geven tot de QuickBooks-gegevens bestand, zult u de QuickBooks Audit Trail-functie waarderen, die bijhoudt wie welke wijzigingen aan het QuickBooks-gegevensbestand aanbrengt. U kunt transacties niet verwijderen uit de lijst of geschiedenis van de audittrail, behalve door gegevens te archiveren en te condenseren. Audit trail inschakelen ...