Hjem Personlig finansiering Ved hjælp af JUnit-dummies

Ved hjælp af JUnit-dummies

Indholdsfortegnelse:

Video: Dragsbæk frigiver medarbejderressourcer ved hjælp af AGV-løsning 2024

Video: Dragsbæk frigiver medarbejderressourcer ved hjælp af AGV-løsning 2024
Anonim

JUnit er en standardiseret ramme til testning af Java-enheder (det vil sige Java-klasser). JUnit kan automatiseres til at tage noget af arbejdet ud af testen.

Forestil dig, at du har oprettet en enumtype med tre værdier: GREEN, YELLOW og RED. Listing 1 indeholder koden:

Listing 1

Public Enum SignalColor {GREEN, YELLOW, RED}

Et trafiklys har en tilstand (som er et fancy navn til trafiklysets farve).

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

Hvis du kender trafiklysets aktuelle tilstand, kan du bestemme, hvad trafiklysets næste tilstand vil være.

public void nextState () {switch (tilstand) {case RED: state = SignalColor. GRØN; pause; tilfælde GUL: tilstand = SignalColor. RØD; pause; tilfælde GREEN: state = SignalColor. GUL; pause; default: state = SignalColor. RØD; pause;}}

Du kan også ændre trafiklysets tilstand et vist antal gange:

offentlig ugyldig ændring (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; public void nextState () {switch (state) {tilfælde RED: state = SignalColor. GRØN; pause; tilfælde GUL: tilstand = SignalColor. RØD; pause; tilfælde GREEN: state = SignalColor. GUL; pause; default: state = SignalColor. RØD; pause;}} offentlig ugyldig ændring (int numberOfTimes) {for (int i = 0; i 

I de gamle dage har du muligvis fortsat skriveskode, skaber flere klasser, kalder NextState og ændrer metoder i Listing 2. Derefter vil du efter flere måneders kodning stoppe for at teste dit arbejde.

Og hvad en overraskelse! Dine test ville mislykkes miserably! Du bør aldrig forsinke testning i mere end en dag eller to. Test tidligt og test ofte!

En filosofi om testning siger, at du skal teste hvert stykke kode, så snart du har skrevet det. Selvfølgelig lyder ikke udtrykket "bit af kode" meget videnskabeligt. Det ville ikke gøre at udviklere går rundt og taler om "chunk-of-code testing", som de gjorde i eftermiddag. Det er bedre at kalde hvert stykke kode en enhed , og få udviklere til at tale om enhedsprøvning .

Den mest almindelige enhed til test er en klasse. Så en typisk Java-udvikler tester hver klasse, så snart klassens kode er skrevet.

Så hvordan går du om at teste en klasse? En nybegynder kan teste TrafficLight-klassen ved at skrive en ekstra klasse - en klasse, der indeholder en hovedmetode. Den vigtigste metode skaber en forekomst af TrafficLight, kalder NextState og ændrer metoder, og viser resultaterne.Nybegynderen undersøger resultaterne og sammenligner dem med nogle forventede værdier.

Efter at have skrevet hovedmetoder for snesevis, hundredvis eller endog tusindvis af klasser, bliver nybegynderen (nu en fuldt udviklet udvikler) træt af testrutinen og søger måder at automatisere testproceduren på. Træt eller ej, kan en udvikler forsøge at dechifrere en anden udviklers håndkodede tests. Uden at have nogen standarder eller retningslinjer for konstruktion af test, kan læsning og forståelse af en anden udviklers test være svært og kedelig.

Så JUnit kommer til undsætning!.

For at finde ud af, hvordan Eclipse automatiserer brugen af ​​JUnit, skal du gøre følgende:

  1. Opret et Eclipse-projekt med Listings 1 og 2.

  2. Højreklik på Windows Explorer i TrafficLight. java filial. På en Mac skal du styre-klikke på pakken Stifinderens TrafficLight. java filial.

    En kontekstmenu vises.

  3. I kontekstmenuen skal du vælge Ny → JUnit Test Case.

    Som følge heraf vises dialogboksen Ny JUnit Test Case.

  4. Klik på Næste nederst i dialogboksen Ny JUnit Test Case.

    Som et resultat ser du den anden side af dialogboksen Ny JUnit Test Case. Den anden side angiver metoder, der tilhører (enten direkte eller indirekte) til TrafficLight-klassen.

  5. Anbring et afkrydsningsfelt i afkrydsningsfeltet mærket trafiklys.

    Som følge heraf placerer Eclipse afkrydsningsfelter i afkrydsningsfelterne nextState () og ændre (int) .

  6. Klik på Udfør nederst i dialogboksen Ny JUnit Test Case.

    JUnit er ikke formelt en del af Java. I stedet kommer med sit eget sæt af klasser og metoder til at hjælpe dig med at oprette test til din kode. Når du har klikket på Finish, spørger Eclipse dig om du vil inkludere JUnit-klasserne og -metoderne som en del af dit projekt.

  7. Vælg Udfør følgende handling og tilføj JUnit 4-bibliotek til byggepaden. Klik derefter på OK.

    Eclipse lukker dialogboksene, og dit projekt har en helt ny TrafficLightTest. java fil. Filens kode er vist i Liste 3.

    Koden i liste 3 indeholder to tests, og begge tests indeholder opkald til en ubehagelig lyderfejlmetode. Eclipse vil gerne have dig til at føje kode for at gøre disse test forbi.

  8. Fjern opkaldene til fejlmetoden. I stedet for fejlsøgningsmetoden skal du indtaste koden med fed skrift i Liste 4.

  9. Højreklik på (i Windows), eller klik på (på en Mac) TrafficLightTest. java filial. Vælg Kør som → JUnit test i den resulterende kontekstmenu.

    Eclipse kan have mere end en slags JUnit testramme op på ærmet. Hvis det er tilfældet, kan du muligvis se en dialogboks som den nedenfor. Hvis du gør det, skal du vælge Eclipse JUnit Launcher, og derefter klikke på OK.

    Som følge heraf kører Eclipse din TrafficLightTest. java program. Eclipse viser resultatet af kørslen foran sin egen Package Explorer. Resultatet viser ingen fejl og ingen fejl. Puha!

Listing 3

Import statisk org. JUnit. Hævde. *; import org. JUnit. Prøve; offentlig klasse TrafficLightTest {@Test public void testNextState () {fail {"Ikke implementeret endnu");} @Test public void testChange () {fail ("Ikke implementeret endnu");}}

Listing 4

import statisk org.JUnit. Hævde. *; import org. JUnit. Prøve; offentlig klasse TrafficLightTest {@Test public void testNextState () { TrafficLight light = nyt 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 test Ændre () { TrafficLight light = new TrafficLight (); lys. ændring (5); assertEquals (SignalColor. GUL, lys tilstand); }}

Når du vælger Kør som → JUnit Test, ser Eclipse ikke efter en hovedmetode. I stedet søger Eclipse efter metoder, der starter med @Test og andre sådanne ting. Eclipse udfører hver af @Test-metoderne.

Ting som @Test er Java annoteringer .

Liste 4 indeholder to @Test-metoder: testNæsteStat og testændring. Metoden TestNextState sætter TrafficLight NextState-metoden til test. På samme måde bøjer testChange-metoden TrafficLight-ændringens muskler.

Overvej koden i testNextState-metoden. TestNextState-metoden gentager gentagne gange TrafficLight-klassens NextState-metode og JUnits assertEquals-metode. AssertEquals-metoden tager to parametre: en forventet værdi og en faktisk værdi.

  • I det øverste assertEquals call er den forventede værdi SignalColor. RØD. Du forventer, at trafiklyset er RØD, fordi du i Listing 2 initialiserer lysets tilstand med værdien SignalColor. RØD.

  • I det øverste assertEquals call er den faktiske værdi lys. tilstand (den farve, der faktisk er gemt i trafiklysets tilstandsvariabel).

Hvis den faktiske værdi er lig med den forventede værdi, fortsætter opkaldet til hævdet Equal passes og JUnit fortsætter med at udføre udsagnene i testNextState-metoden.

Men hvis den faktiske værdi er forskellig fra den forventede værdi, fejler assertEquals og resultatet af kørslen viser fejlen. For eksempel overvej hvad der sker, når du ændrer den forventede værdi i det første assertEquals call i Listing 4:

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

Umiddelbart efter sin konstruktion er et trafiklys farve RØD, ikke GUL. Så testNextState-metoden indeholder en falsk påstand og resultatet af at gøre Run As → JUnit ligner et barns dårlige rapportkort.

At have testNæsteStat før testændring i liste 4 garanterer ikke at JUnit vil udføre testNextState før udfør testChange. Hvis du har tre @Test-metoder, kan JUnit udføre dem fra øverste til nederste, fra bunden til øverste, fra den midterste metode til den øverste til den nederste eller i nogen grad overhovedet. JUnit kan endda stoppe midt i en test for at udføre dele af en anden test. Derfor bør du aldrig tage antagelser om resultatet af en test, når du skriver en anden test.

Du vil måske have visse udsagn, der skal udføres, før nogen af ​​testene begynder.Hvis du gør det, skal du sætte disse udsagn i en metode, der hedder setUp, og forord denne metode med en @For annotation. (Se afkrydsningsfeltet setUp () i figuren i trin 3 i liste 2 ovenfor.)

Her er nyheder: Ikke alle hævderEværdige metoder er skabt ens! Forestil dig at tilføje en førerklasse til dit projekt kode. "Driver klasse" betyder ikke en printerdriver eller en bunken driver. Det betyder en person, der kører bil - en bil, der nærmer dig dit trafiklys. For detaljer, se Listing 5.

Listing 5

Public Class Driver {offentlig dobbelt hastighed (TrafficLight-lys) {switch (lys tilstand) {case RED: return 0. 0; tilfælde GUL: retur 10. 0; tilfælde GREEN: retur 30 0; standard: return 0. 0;}}}

Når lyset er rødt, er førers hastighed 0. 0. Når lyset er gult, sænker bilen til et sikkert 10. 0. Når lyset er grønt, Bilen krydser med en hastighed på 30 0.

(I dette eksempel er hastighedsenhederne ligegyldige. De kan være miles per time, kilometer pr. time eller hvad som helst. Den eneste måde det betyder er, om Bilen er i Boston eller New York City. I så fald bør hastigheden for GULLE være meget højere end hastigheden for GREEN, og hastigheden for RED skal ikke være 0. 0.)

For at skabe JUnit-test for Førerklasse, følg trin 1 til 9, der er nævnt tidligere i denne artikel, men sørg for at foretage følgende ændringer:

  • Højreklik eller højreklik på driveren i trin 2. java filial i stedet for TrafficLight. java filial.

  • I trin 5 skal du sætte et afkrydsningsfelt i driverafdelingen.

  • I trin 8 skal du fjerne opkaldene til fejlmetode for at oprette DriverTest-klassen, der er vist i Listing 6. (Koden, du indtaster, vises med fed skrift.)

Listing 6

Import statisk org. JUnit. Hævde. *; import org. JUnit. Prøve; offentlig klasse DriverTest {@Test public void testVelocity () { TrafficLight light = nyt TrafficLight (); lys. ændring (7); Driverdriver = Ny driver (); assertEquals (30,0, driver. Hastighed (lys), 0,1); }}

Hvis alt går godt, passer JUnit-testen med flyvende farver. (For at være mere præcis, passerer JUnit med farven grøn!) Så kørslen af ​​DriverTest er ikke ny eller spændende. Hvad er spændende, er kaldet til at hævde, at Equals i Listing 6.

Når du sammenligner to dobbeltværdier i et Java-program, har du ikke ret til at forvente næsenes ligestilling. Det vil sige, at en af ​​de dobbelte værdier kan være 30,000000000, mens den anden dobbelte værdi er tættere på 30 000000001. En computer har kun 64 bit til at gemme hver dobbeltværdi, og unøjagtigheder kryber ind her og der. Så i JUnit har assertEquals metode til sammenligning af dobbeltværdier en tredje parameter. Den tredje parameter repræsenterer wiggle room.

I liste 6 er sætningen

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

siger følgende: "Angiv, at driverens faktiske værdi. hastighed (lys) er inden for 0. 1 af den forventede værdi 30. 0. Hvis det er tilfældet, overgår overfaldet. Hvis ikke, fejler påstanden. "

Når du kalder assertEquals for dobbeltværdier, kan det være vanskeligt at vælge en god fejlmargin.Disse tal illustrerer de slags ting, der kan gå galt.

Her er din fejlmargin for lille.

Der er din fejlmargin for stor.

Heldigvis, i dette DriverTest eksempel er margin 0. 1 et meget sikkert spil. Her er hvorfor:

  • Når assertEquals testen fejler, svigter den med meget mere end 0. 1.

    Fejl betyder at have en driver. hastighed (lys) værdi som 0. 0 eller 10. 0.

  • I dette eksempel repræsenterer det sandsynligvis fuldstændig, on-the-nose-lighed, når assertEquals testen passerer.

    Værdien af ​​driveren. hastighed (lys) kommer direkte fra retur 30. 0 kode i liste 5. Ingen aritmetik er involveret. Så værdien af ​​chaufføren. hastighed (lys) og den forventede 30. 0 værdi skal være nøjagtig den samme (eller næsten nøjagtigt det samme).

Ved hjælp af JUnit-dummies

Valg af editor

Fuld redigeringsfunktion i Photoshop Elements 10 - dummies

Fuld redigeringsfunktion i Photoshop Elements 10 - dummies

Fuld fotoredigeringsfunktion tilbyder bundter af værktøjer, som du kan bruge at redigere dine billeder, fra korrektionsværktøjer til fastsættelse af farve og klarhed til filtre, lag og meget mere for at ændre eksisterende fotos eller skabe helt originale billeder fra bunden. Men alle disse værktøjer gør også Komplet fotoredigeringstilstand kompleks. Du kan flytte ind i ...

Generelle blandingsformer i Photoshop Elements - dummies

Generelle blandingsformer i Photoshop Elements - dummies

Elementer spænder over 25 blandingstilstande. Blend modes påvirker hvordan farver interagerer mellem lag og også hvordan farver interagerer, når du anvender maling på et lag. Ikke alene gør blandingstilstande interessante effekter, men du kan også nemt anvende, redigere eller fjerne blandingsfunktioner uden at røre dine billedpixel. De forskellige blandingstilstande ...

Geometriske formindstillinger i Photoshop Elements - dummies

Geometriske formindstillinger i Photoshop Elements - dummies

Geometriindstillinger hjælpe med at definere, hvordan dine figurer ser ud. Klik på nedpegepilen i værktøjsindstillingerne i Elements for at få adgang til de geometriske indstillinger, der beskrives i det følgende. Rektangulære og afrundede rektangel geometriske indstillinger Her er geometriske indstillinger for rektangel og afrundede rektangelformer: Ubegrænset: Giver dig mulighed for at få fri tøj til at tegne en ...

Valg af editor

Sådan bygger du tabeller i HTML5 - dummies

Sådan bygger du tabeller i HTML5 - dummies

Sommetider indeholder din webside data bedst fremlagt i et bord . Du kan bruge HTML5's komplette bordsystem til at oprette tabeller som den i dette eksempel: Den grundlæggende struktur i et bord i HTML-format er rimeligt let at forstå; Tjek koden, der oprettede tabellen i eksemplet:

Hvordan man ændrer gentagne baggrunde på CSS3-steder - dummier

Hvordan man ændrer gentagne baggrunde på CSS3-steder - dummier

Der er situationer, hvor man kun vil en enkelt kopi af et baggrundsbillede på dit CSS3-websted. Det kan være, at billedet du har brugt er noget, der ikke gentager sig godt eller er stort nok til, at du virkelig ikke vil have det gentaget. Følgende procedure viser en teknik, du kan bruge til at fortælle ...

Hvordan man opbygger en webside skabelon fra scratch-dummies

Hvordan man opbygger en webside skabelon fra scratch-dummies

Standardværktøjet på tværs af digitalt agenturer og interne afdelinger til opbygning af website grafik er Adobe Photoshop. Selvom fyrværkeri er optimeret og målrettet til at producere web-grafiske kildefiler, er det bare ikke fanget, sandsynligvis på grund af den massive genoplæringsindsats ville det medføre, at hele afdelinger gør omskifteren. At oprette et nyt ...

Valg af editor

Sådan godkendes medlemmer til din LinkedIn Group - dummier

Sådan godkendes medlemmer til din LinkedIn Group - dummier

Som flere og flere mennesker finder ud af din ny LinkedIn-gruppe, og som medlemmer begynder at deltage, kan du opleve, at nogle af de personer, der har klikket på linket for at deltage, ikke er på din forhåndsgodkendte liste. Måske er de mennesker, du ikke har forstået var på LinkedIn, eller du var ikke klar over, at de var gyldige grupper ...

Hvordan man tilføjer billeder til kroppen i din LinkedIn-profil til Visual Social Marketing - dummies

Hvordan man tilføjer billeder til kroppen i din LinkedIn-profil til Visual Social Marketing - dummies

Ud over et profilbillede giver LinkedIn brugere mulighed for at forbedre de visuelle sociale markedsføringselementer i deres profiler ved at tilføje billeder til deres profilprofil. Du kan tilføje billeder til ethvert afsnit i din LinkedIn-profil. Tilføjelse af billeder til din profil kan hjælpe dig med at fortælle din historie visuelt og ...

Sådan tilføjer du en virksomhedsside til LinkedIn - dummies

Sådan tilføjer du en virksomhedsside til LinkedIn - dummies

, Når du har opfyldt kravene til oprettelse en virksomhedsside på LinkedIn, er det tid til at komme i gang ved at tilføje selskabets side til Linkedins system. For at oprette din virksomhedsside skal du blot følge disse trin: