Hjem Personlig finansiering Ved hjelp av JUnit-dummies

Ved hjelp av JUnit-dummies

Innholdsfortegnelse:

Video: Suspense: The Dead Sleep Lightly / Fire Burn and Cauldron Bubble / Fear Paints a Picture 2024

Video: Suspense: The Dead Sleep Lightly / Fire Burn and Cauldron Bubble / Fear Paints a Picture 2024
Anonim

JUnit er et standardisert rammeverk for testing av Java-enheter (det vil si Java-klasser). JUnit kan automatiseres for å ta litt av arbeidet ut av testing.

Tenk deg at du har opprettet en enumtype med tre verdier: GREEN, YELLOW og RED. Oppføring 1 inneholder koden:

Listing 1

Public Enum SignalColor {GREEN, YELLOW, RED}

Et trafikklys har en tilstand (som er et fancy navn for trafikklysets farge).

offentlig klasse TrafficLight {SignalColor state = SignalColor. RØD;

Hvis du kjenner til trafikklysets nåværende tilstand, kan du bestemme hva trafikklysets neste tilstand vil være.

offentlig tomgang nextState () {switch (state) {tilfelle RED: state = SignalColor. GRØNN; gå i stykker; tilfelle GUL: state = SignalColor. RØD; gå i stykker; tilfelle GREEN: state = SignalColor. GUL; gå i stykker; standard: state = SignalColor. RØD; pause;}}

Du kan også endre trafikklysets tilstand et visst antall ganger:

Offentlig tomgangsendring (int numberOfTimes) {for (int i = 0; i 

Når du har alt sammen, har du TrafficLight-klassen i liste 2.

Liste 2

offentlig klasse TrafficLight {SignalColor state = SignalColor. RØD; offentlig tomrom nextState () {switch (state) {tilfelle RED: state = SignalColor. GRØNN; gå i stykker; tilfelle GUL: state = SignalColor. RØD; gå i stykker; tilfelle GREEN: state = SignalColor. GUL; gå i stykker; standard: state = SignalColor. RØD; pause;}} offentlig ugyldig forandring (int numberOfTimes) {for (int i = 0; i 

I gamle dager har du kanskje fortsatt å skrive kode, ringer til nesteState og endrer metoder i liste 2. Så, etter flere måneder med koding, vil du stoppe for å teste arbeidet ditt.

Og hva en overraskelse! Dine tester ville mislykkes ulykkelig! Du bør aldri forsinke testing i mer enn en dag eller to. Test tidlig og test ofte!

En filosofi om testing sier at du bør teste hver del av koden så snart du har skrevet den. Selvfølgelig høres ikke uttrykket "bit av kode" veldig vitenskapelig. Det ville ikke gjøre at utviklere gikk rundt og snakket om "brikke-av-kode testing" som de gjorde i ettermiddag. Det er bedre å ringe hver bit av kode a enhet , og få utviklere til å snakke om enhetstesting .

Den vanligste testenheten er en klasse. Så en typisk Java-utvikler tester hver klasse så snart klassens kode er skrevet.

Så hvordan går du om å teste en klasse? En nybegynner kan teste TrafficLight-klassen ved å skrive en ekstra klasse - en klasse som inneholder en hovedmetode. Hovedmetoden lager en forekomst av TrafficLight, kaller NextState og endrer metoder, og viser resultatene.Nybegynner undersøker resultatene og sammenligner dem med noen forventede verdier.

Etter å ha skrevet hovedmetoder for dusinvis, hundrevis eller tusenvis av klasser, blir nybegynneren (nå en fullverdig utvikler) sliten av testrutinen og ser etter måter å automatisere testprosedyren. Trøtt eller ikke, en utvikler kan prøve å tyde på en annen utviklers håndkodede tester. Uten å ha noen standarder eller retningslinjer for konstruksjon av tester, kan lesing og forståelse av en annen utviklers tester være vanskelig og kjedelig.

Så JUnit kommer til redning!.

For å finne ut hvordan Eclipse automatiserer bruken av JUnit, gjør du følgende:

  1. Lag et formørkelsesprosjekt som inneholder oppføringer 1 og 2.

  2. Høyreklikk på Package Explorer's TrafficLight. java gren. På en Mac, kontroller-klikk pakken Utforskerens TrafficLight. java gren.

    En kontekstmeny vises.

  3. I kontekstmenyen velger du Ny → JUnit Test Case.

    Som et resultat vises dialogboksen Ny JUnit Test Case.

  4. Klikk på Neste nederst i dialogboksen Ny JUnit Test Case.

    Som et resultat ser du den andre siden av dialogboksen Ny JUnit Test Case. Den andre siden viser metoder som tilhører (enten direkte eller indirekte) til TrafficLight-klassen.

  5. Legg merke av i avkrysningsruten merket Traffic Light.

    Som følge av dette plasserer Eclipse avmerkingsboksene i nextState () og endre (int) avmerkingsboksene.

  6. Klikk Fullfør nederst i dialogboksen Ny JUnit Test Case.

    JUnit er ikke formelt en del av Java. I stedet kommer med sitt eget sett med klasser og metoder for å hjelpe deg med å lage tester for koden din. Etter at du har klikket på Finish, spør Eclipse deg om du vil inkludere JUnit-klassene og metodene som en del av prosjektet ditt.

  7. Velg Utfør følgende handling og legg til JUnit 4-bibliotek til byggestien. Klikk deretter OK.

    Eclipse lukker dialogboksene og prosjektet ditt har en helt ny TrafficLightTest. java-fil. Filens kode er vist i Liste 3.

    Koden i liste 3 inneholder to tester, og begge tester inneholder samtaler til en ubehagelig lydende feilsøkingsmetode. Eclipse vil at du skal legge til kode for å gjøre disse testene bestått.

  8. Fjern samtalene til feilsøkingsmetoden. I stedet for feilsøkingsmetoden ringer du inn koden som vises i fet skrift i Liste 4.

  9. Høyreklikk (i Windows), eller kontroll-klikk (på en Mac) TrafficLightTest. java gren. I den resulterende kontekstmenyen velger du Kjør som → JUnit Test.

    Eclipse kan ha mer enn en slags JUnit-testramme opp på ermet. I så fall kan du se en dialogboks som den nedenfor. Hvis du gjør det, velger du Eclipse JUnit Launcher, og klikker deretter OK.

    Som et resultat kjører Eclipse TrafficLightTest. java program. Eclipse viser resultatet av løp foran sin egen Package Explorer. Resultatet viser ingen feil og ingen feil. Puh!

Liste 3

Importer statisk org. JUnit. Hevde. *; import org. JUnit. Test; offentlig klasse TrafficLightTest {@Test public void testNextState () {fail {"Ikke implementert ennå");} @Test public void testChange () {fail ("Ikke implementert ennå");}}

Listing 4

import statisk org.JUnit. Hevde. *; import org. JUnit. Test; offentlig klasse TrafficLightTest {@Test public void testNextState () { TrafficLight light = nytt TrafficLight (); assertEquals (SignalColor. Rød, lys tilstand); lys. nextState (); assertEquals (SignalColor. GREEN, light. State); lys. nextState (); assertEquals (SignalColor. GUL, lys. Tilstand); lys. nextState (); assertEquals (SignalColor. Rød, lys tilstand); } @Test public void testChange () { TrafficLight light = nytt TrafficLight (); lys. endring (5); assertEquals (SignalColor. GUL, lys. Tilstand); }}

Når du velger Kjør som → JUnit Test, ser ikke Eclipse etter en hovedmetode. I stedet ser Eclipse etter metoder som starter med @Test og andre slike ting. Eclipse kjører hver av @Test-metodene.

Sånn som @Test er Java annoteringer .

Liste 4 inneholder to @Test metoder: testNextState og testChange. TestNextState-metoden setter TrafficLight NextState-metoden til test. På samme måte bøyer testChange-metoden TrafficLight-endringsmetodens muskler.

Vurder koden i testNextState-metoden. TestNextState-metoden kalles gjentatte ganger TrafficLight-klassens NextState-metode og JUnits assertEquals-metode. AssertEquals-metoden tar to parametre: en forventet verdi og en faktisk verdi.

  • I den øverste assertEquals call er den forventede verdien SignalColor. RØD. Du forventer at trafikklyset er RØD fordi du i oppføring 2 initierer lysets tilstand med verdien SignalColor. RØD.

  • I den øverste assertEquals call er den faktiske verdien lys. tilstand (fargen som faktisk er lagret i trafikklysets tilstandsvariabel).

Hvis den faktiske verdien er lik forventet verdi, fortsetter anropet til assertEquals og JUnit fortsetter å utføre uttalelsene i testNextState-metoden.

Men hvis den faktiske verdien er forskjellig fra forventet verdi, feiler assertEquals og resultatet av kjøringen viser feilen. For eksempel, vurder hva som skjer når du endrer forventet verdi i den første assertEquals-samtalen i Liste 4:

@Test public void testNextState () {TrafficLight light = new TrafficLight (); assertEquals (SignalColor. GUL, lys. tilstand);

Umiddelbart etter konstruksjonen er et trafikklys farge RØD, ikke GUL. Så testNextState-metoden inneholder en falsk påstand og resultatet av å gjøre Run As → JUnit ser ut som et barns dårlige rapportkort.

Å ha testNesteStat før testVariant i liste 4 garanterer ikke at JUnit vil utføre testNextState før du utfører testChange. Hvis du har tre @Test-metoder, kan JUnit utføre dem fra øverste til nederste, fra nederste til øverste, fra mellommetoden til de øverste til de nederste, eller i hvilken som helst rekkefølge. JUnit kan til og med sette pause i midten av en test for å utføre deler av en annen test. Det er derfor du aldri bør gjøre antagelser om resultatet av en test når du skriver en annen test.

Du vil kanskje ha visse utsagn som skal utføres før noen av testene begynner.Hvis du gjør det, må du sette disse uttalelsene i en metode som heter setUp, og forord den metoden med en @For annotasjon. (Se setUp () avkryssingsboksen i figuren i Trinn 3 i Liste 2 ovenfor.)

Her er nyheter: Ikke alle hevderEkvalsmetoder er skapt like! Tenk deg å legge til en førerklasse til prosjektets kode. "Driver klasse" betyr ikke en skriverdriver eller en stabler driver. Det betyr at en person som kjører bil - en bil som nærmer seg trafikklyset ditt. For detaljer, se Oppføring 5.

Oppføring 5

offentlig klasse Driver {offentlig dobbel hastighet (TrafficLight-lys) {bryter (lys tilstand) {tilfelle RØD: return 0. 0; tilfelle GUL: retur 10. 0; tilfelle GREEN: return 30. 0; standard: retur 0. 0;}}}

Når lyset er rødt, er sjåførens hastighet 0. 0. Når lyset er gult, senker bilen til et trygt 10. 0. Når lyset er grønt, Bilen krysser med en hastighet på 30 0.

(I dette eksemplet er hastighetsenhetene ingen betydning. De kan være miles per time, kilometer per time, eller hva som helst. Den eneste måten det betyr er om Bilen er i Boston eller New York City. I så fall bør hastigheten for GULLE være mye høyere enn hastigheten for GREEN, og hastigheten for RED skal ikke være 0. 0.)

For å lage JUnit-tester for Førerklasse, følg trinn 1 til 9 som er oppført tidligere i denne artikkelen, men sørg for å gjøre følgende endringer:

  • I trinn 2 høyreklikker eller kontrollerer du driveren. java filial i stedet for TrafficLight. java gren.

  • I trinn 5 legger du merke i drivergrenen.

  • Fjern trinnene i feilsøkingsmetoden for å opprette DriverTest-klassen som vises i Liste 6. (Koden du skriver inn vises i fet skrift.)

Liste 6

Importer statisk org. JUnit. Hevde. *; import org. JUnit. Test; offentlig klasse DriverTest {@Test public void testVelocity () { TrafficLight light = nytt TrafficLight (); lys. endring (7); Driver driver = Ny driver (); assertEquals (30, 0, driver. Hastighet (lys), 0. 1); }}

Hvis alt går bra, passerer JUnit-testen med flygende farger. (For å være mer presis, passerer JUnit med fargen grønn!) Så kjøringen av DriverTest er ikke ny eller spennende. Hva er spennende er kallet for å hevdeEquals i Listing 6.

Når du sammenligner to doble verdier i et Java-program, har du ingen rett til å forvente nese likestilling. Det vil si at en av de dobbelte verdiene kan være 30 000000000 mens den andre dobbelte verdien er nærmere 30. 000000001. En datamaskin har bare 64 bits å lagre hver dobbel verdi, og unøyaktigheter kryper inn her og der. Så i JUnit har assertEquals-metoden for å sammenligne dobbelte verdier en tredje parameter. Den tredje parameteren representerer wiggle room.

I liste 6 er setningen

assertEquals (30, 0, driver. Hastighet (lys), 0. 1);

sier følgende: "Angiv at den faktiske verdien av driveren. hastighet (lys) er innenfor 0. 1 av den forventede verdien 30. 0. Hvis så går overføringen. Hvis ikke, svikter påstanden. "

Når du ringer assertEquals for doble verdier, kan det være vanskelig å velge en god feilmargin.Disse figurene illustrerer hva slags ting som kan gå galt.

Her er feilmarginen din for liten.

Der er feilmarginen din for stor.

Heldigvis, i dette DriverTest-eksemplet, er margin 0. 1 en veldig sikker innsats. Her er hvorfor:

  • Når assertEquals testen mislykkes, mislykkes det med mye mer enn 0. 1.

    Feil betyr at du har en sjåfør. hastighet (lys) verdi som 0. 0 eller 10. 0.

  • I dette eksemplet, når assertEquals-testen passerer, representerer det sannsynligvis fullstendig nesekvalitet.

    Verdien av driveren. hastighet (lys) kommer direkte fra retur 30. 0 kode i liste 5. Ingen aritmetikk er involvert. Så verdien av sjåføren. hastighet (lys) og forventet 30. 0-verdi bør være nøyaktig den samme (eller nesten nøyaktig den samme).

Ved hjelp av JUnit-dummies

Redaktørens valg

Vanlige visuelle studio-tastaturgenveier - dummier

Vanlige visuelle studio-tastaturgenveier - dummier

Du kan få tilgang til mange av funksjonene du bruker i Visual Studio til Lag en Silverlight-applikasjon gjennom tastaturgenveier. Her er de vanlige snarveiene som hjelper deg med å utføre oppgaver raskt i Visual Studio. Tastatur snarvei Handling Ctrl + Alt + F1 Åpne Visual Studio Documentation Ctrl + Shift + B Bygg programmet Ctrl + F5 Kjør prosjektet Ctrl + Alt + X Åpne verktøykassen hvis ...

Velg riktig format for e-postmarkedsføringsmeldingen din - dummies

Velg riktig format for e-postmarkedsføringsmeldingen din - dummies

Som Du komponerer markedsførings-e-postene dine, husk at formatet på e-posten din visuelt kommuniserer hovedideen til innholdet før publikum selv begynner å lese det. Forbrukerne forventer at formatet på e-posten din samsvarer med informasjonen den inneholder, slik at bruk av riktig format bidrar til å bygge publikums tillit. Velg ...

Kombinere flere samtaler til handling i din markedsføring e-post - dummies

Kombinere flere samtaler til handling i din markedsføring e-post - dummies

Din e-postmarkedsføringslisten består sannsynligvis av prospekter og kunder i ulike stadier av kjøpesyklusen med litt forskjellige interesser, så en del av publikum vil aldri være klar til å reagere umiddelbart på hver handling. Selv om alle på din e-postliste er klare til handling, er dine anrop til handling ...

Redaktørens valg

Opprett en Pivot-tabell YTD-totalvisning for Excel-rapporten - dummies

Opprett en Pivot-tabell YTD-totalvisning for Excel-rapporten - dummies

En nyttig rapportvisning I et Excel-pivottabell er YTD-totalsvisningen. Noen ganger er det nyttig å fange et løp-total-visning for å analysere bevegelsen av tall på en årlig basis (YTD) basis. Denne figuren illustrerer et pivottabell som viser en løpende total omsetning per måned for hvert år. I denne visningen er du ...

Opprett en pivottabel ved hjelp av Excels interne datamodell - dummies

Opprett en pivottabel ved hjelp av Excels interne datamodell - dummies

I enkelte tilfeller vil du kanskje opprett et pivottabell fra grunnen ved hjelp av Excels eksisterende interne datamodell som kildedata. Her er trinnene for å gjøre det: Velg Sett inn → PivotTable fra båndet. Dialogboksen Create PivotTable åpnes. Velg alternativet Bruk en ekstern datakilde, som vist, og klikk deretter på ...

Hvordan lage en standard snikker i Power Pivot - dummies

Hvordan lage en standard snikker i Power Pivot - dummies

Slicers tilbyr et brukervennlig grensesnitt med som du kan filtrere en Power Pivot pivottabell. Det er på tide å lage din første slicer. Bare følg disse trinnene:

Redaktørens valg

Alarmhendelsen i GameMaker: Studio-dummies

Alarmhendelsen i GameMaker: Studio-dummies

Alarmer er utmerket for når du vil ha tid Handlinger i din spill i GameMaker: Studio. For eksempel, hvis du vil at spilleren bare skal skyte kuler en gang hvert annet sekund, kan du sette en alarm for det. Hvis du vil når nye fiendtlige fly vises, kan du sette en alarm for det ...

Flytt retningsaktive handlinger i GameMaker: Studio - dummies

Flytt retningsaktive handlinger i GameMaker: Studio - dummies

I GameMaker: Studio, Flytt-fanen er den første kategorien i vinduet Objektegenskaper. Her er en liste over hver av handlingene du kan tilordne objektene. I følgende definisjoner brukes begrepet Instance for å referere til hva handlingen påvirker. Men du konfigurerer handlingen i objektet ...

Andre hendelser i GameMaker: Studio - dummies

Andre hendelser i GameMaker: Studio - dummies

I GameMaker: Studio, Andre hendelser er de som ikke anses verdige av sitt eget sted på menyen Event. Disse andre hendelsene kan være ganske kjempebra. Menyelementene er ganske mye selvforklarende, så det er ikke nødvendig med detaljer her. For fullstendige beskrivelser av hver av disse elementene, kan du alltid trykke F1 i GameMaker og ...