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 2025

Video: Suspense: The Dead Sleep Lightly / Fire Burn and Cauldron Bubble / Fear Paints a Picture 2025
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

Vis resultatene i forhold til et målområde i Excel-oversiktspanelet - dummies

Vis resultatene i forhold til et målområde i Excel-oversiktspanelet - dummies

Noen ganger trenger du målserier i Excel-oversikten og rapportene dine. I enkelte bedrifter er et mål ikke en verdi - det er en rekke verdier. Det vil si at målet er å holde seg innenfor et definert målområde. Tenk deg at du klarer en liten bedrift som selger esker med kjøtt. En del av jobben din er å ...

Slicer Tilpasninger for Slicers på Excel Dashboard - dummies

Slicer Tilpasninger for Slicers på Excel Dashboard - dummies

Hvis du skal bruke slicers på en Excel-dashbordet, bør du gjøre litt formatering for å få dine skiver til å passe til temaet og oppsettet på instrumentpanelet. Følgende diskusjon dekker noen formateringsjusteringer du kan gjøre til dine skiver. Størrelse og plassering av skiver En skiver oppfører seg som en standard Excel ...

Enkel statistikk i Excel Data Analyse - dummies

Enkel statistikk i Excel Data Analyse - dummies

Excel gir flere praktiske, brukervennlige verktøy for å analysere informasjon som du lagrer i et bord, inkludert noen raske og skitne statistiske verktøy. Se på følgende enkle bord. En enkel dagligvareliste. Et av de smaleste og raskeste verktøyene som Excel gir, er muligheten til enkelt å beregne summen, gjennomsnittet, antall, minimum og maksimum av ...

Redaktørens valg

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Filtrene kategorien er trolig den mest interessante og en nyttig kategori som er levert av dialogboksen QuickBooks Modify Report. Filtre-fanen lar deg sette opp filtre som du kan bruke til å angi hvilken informasjon som oppsummeres i rapporten. For å bruke Filtrer-fanen velger du først feltet du vil ha ...

Bruk skjermfeltet til å modifisere QuickBooks 2012-rapporter - dummies

Bruk skjermfeltet til å modifisere QuickBooks 2012-rapporter - dummies

Hvis du klikker Tilpass rapport- QuickBooks viser dialogboksen Endre rapport, som du kan bruke til å tilpasse en rapport. Når du tilpasser en rapport, endrer du rapportens utseende, layout og informasjonen som den oppsummerer. Dialogboksen Endre rapport ser annerledes ut for ulike rapporttyper. Likevel, hvis du ser forbi ...

Slik bruker du QuickBooks for din hvite papir forretningsplan - dummies

Slik bruker du QuickBooks for din hvite papir forretningsplan - dummies

QuickBooks kan hjelpe deg skriv en hvit-papir forretningsplan. Folk skriver ofte en forretningsplan for hvitt papir når de vet at de trenger en strategisk plan, men ikke ønsker å ta de harde beslutningene som er nødvendige for en strategisk plan. Personen i denne konfronten skriver en lang hvit-papir forretningsplan for å camouflere den fraværende strategiske planen. ...

Redaktørens valg

Canon 60D elektronisk nivåfunksjon - dummies

Canon 60D elektronisk nivåfunksjon - dummies

Ikke hvert fotografi må være nivå med horisonten. Imidlertid lider mange typer bilder (landskap, bybilder og arkitektonisk fotografi) sterkt når kameraet er vippet. Den gammeldags løsningen for å utjevne kameraet ditt er å bruke et boble- eller åndnivå (funnet i fotobutikker) for å kontrollere kameraets justering med ...

Kamerainnstillingsdisplayet på et Canon EOS Rebel T3-serie Kamera-dummies

Kamerainnstillingsdisplayet på et Canon EOS Rebel T3-serie Kamera-dummies

På din Canon Rebel T3 eller T3i, kan du se en samling av tilleggsinnstillingsdata via kamerainnstillingsdisplayet. Denne skjermen er bare et informasjonsverktøy, men; Du kan ikke justere noen av de rapporterte innstillingene fra denne skjermen. For å vise skjermbildet Kamerainnstillinger på T3i, vis først innstillingsinnstillingene ...

Canon EOS 70D Kameraoppsett - dummies

Canon EOS 70D Kameraoppsett - dummies

Her er en oversikt over knappene, ringer og andre eksterne kontroller på Canon EOS 70D-kameraet ditt. Objektivet vist i de følgende figurene er Canon EF-S 18-135mm IS (bildestabiliseringsmodell) som selges med kameraet; Andre linser kan variere.