Introduction til Unit Testing
Del
Del
Del
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert å bare $ 3. Ikke gå glipp av.
er Unit testing relativt ny i Action prosjekter. Selv FlexUnit har vært rundt på en stund det var ikke intuitivt å sette opp, og det var mange av uoverensstemmelser med dokumentasjonen. Heldig for oss, er FlexUnit nå bygget inn i Flash Builder 4. Selv om dokumentasjonen er fortsatt sparsom, vil denne opplæringen være en god primer for å sette opp en Test Suite, går over flere enheten testeksempler og viser hvordan du kjører /analysere dem.
For de av dere som ikke er kjent med enhetstesting la oss se hva Wikipedia har å si
I dataprogrammering, er enhetstesting en programvare verifikasjon og validering metode der programmere gevinster tillit til at enkelte enheter av kildekode er egnet til bruk ... Unit tester er vanligvis skrevet og drevet av programvareutviklere å sikre at koden oppfyller sin design og oppfører seg som forutsatt. - Wikipedia
I denne opplæringen vil jeg vise deg hvordan jeg satt opp noen enkle enhet tester på min Flash Camo rammeverk. Du må laste ned en kopi av Flash Builder 4 (i Beta akkurat nå) for å følge med. Også, vil du ønsker å laste ned den nyeste versjonen av Flash Camo (2.2.1) herfra
Trinn 1:. Sette opp en Unit Test Prosjekt
La oss lage et nytt prosjekt kalt < . em> UnitTestIntro
Vi må plassere vår Flash Camo SWC inn i en libs /swcs Til slutt vil vi trenge å fortelle vårt prosjekt hvor du finner vår SWC, høyreklikk på prosjektet og gå inn i dens egenskaper. Gå til Action Build Path og velg Library Path kategorien. Klikk på Legg SWC mappe og peker til lib /swcs katalogen. Nå som vi har alt oppsett, kan vi begynne å gjøre noen grunnleggende enhetstesting. Det er viktig å merke seg at du ikke kan gjøre enhetstesting direkte i en Flex bibliotekprosjektet. Det er ikke et problem for dette prosjektet, men hvis du ønsker å teste et bibliotek med kode hva jeg vanligvis gjør er å sette opp et nytt prosjekt (som vi gjør her) deretter koble de to prosjektene sammen og lage alle testene i det nye prosjektet. Hvis du ikke jobber i en Flex Library prosjekt og ønsker å teste koden din kan du ganske enkelt lage dine tester i det samme prosjektet. Jeg vil foreslå å holde de to separate, på denne måten kan du tydelig se hva som er test klasser og hva er virkelige klasser. Vi skal gå inn på dette litt senere når du ser hvor vi setter opp test Før jeg starter noe, jeg ta en stund å finne ut nøyaktig hva jeg skal gjøre. Dette er svært viktig når du setter opp enhet tester. Denne typen utvikling kalles Test Driven Development Test-drevet utvikling (TDD) er en programvare utviklingen teknikk som bruker korte utviklingsiterasjoner basert på forhåndsskrevne testtilfeller som definerer ønskede forbedringer eller nye funksjoner. Hver iterasjon produserer kode er nødvendig for å passere som iterasjon tester. Til slutt, programmerer eller team refactors koden for å imøtekomme endringer. Et sentralt TDD konseptet er at å forberede tester før koding til rette for rask tilbakemelding endringer. - Wikipedia Siden dette er en kort intro vi kommer til å bruke en eksisterende kodebibliotek for å teste mot. Men som du bygge din egen applikasjon du bør skrive tester underveis for å bekrefte at koden fungerer og at eventuelle endringer /refactoring ikke knekke koden implementering. Her er en oversikt over de testene vi skal utføre: Hvis du er ny til Flash Camo kan du sjekke ut introen jeg skrev (del 1 og del 2), men du kan enkelt gjøre denne opplæringen uten noen kunnskap om hvordan rammeverket fungerer. Igjen, dette er rett og slett kommer til å være et kodebibliotek for oss å teste med Nå som vi har en plan for å gjøre vår testing, la oss lage vår første test. Høyreklikk på prosjektet og velg Ny > Test Case Class Du vil nå bli presentert med veiviseren. Det bør være kjent for alle som har skapt en klasse i Flex /Flash Builder før. Her er hva vinduet ut: La oss snakke om noen av de nye feltene i veiviseren. Vi kan starte med det faktum at superklassen er allerede fylt ut for oss: flexunit.framework.TestCase Siden vi kommer til å teste Flash Camo sin CamoPropertySheet la oss fylle følgende verdier i skjemaet. Her er et skjermbilde av hvordan jeg setter opp dette: Hit finish og vi skal ha vår første test klar for oss å legge til noen kode for å La oss ta en titt på koden Flash Builder har generert for oss: Vi starter ut ved å ha en privat eiendom som heter classToTestRef Den neste viktig metode er Oppsett Den siste metoden her er Teardown Du har kanskje lagt merke til på slutten av klassen det er en annen metode som kalles testSampleMethod Hver test vil være en metode vi legge til denne klassen. Når vi kjører Unit Test Harness vil den automatisk ringe alle våre metoder dynamisk, selvfølgelig starter med oppsett og etterbehandling med Teardown Nå som vi har en grunnleggende forståelse av TestClass oppsett la oss se på å kjøre den Før vi kan kjøre dette vi trenger minst én test. La oss uncomment testSampleMethod Når du har uncommented testSampleMethod Du skal nå se følgende vindu som ber oss om å velge hvilken test vi ønsker å kjøre. Som du ser, dette er satt opp for når vi har mye å teste, men for nå har vi bare én testSampleMethod å kjøre. Velg Merk alt og traff OK Etter at testen kjøres, vil nettleseren din dukker opp med følgende side:. Hvis du går tilbake til Flash Builder du vil også se dette i den FlexUnit Resultater panelet: Se hvor enkelt dette var å kjøre? Vi har utført vår første enheten test og allerede har vi en enkelt feil. Før vi går videre for å fikse denne feilen la oss snakke om disse to vinduer. Nettsiden som var åpen bør lukkes automatisk, men noen ganger er det ikke. Dette er en enkel swf som utfører våre tester i Flash og utganger noen data Flash Builder leser å vise til resultater av testen. Du kan ignorere denne websiden for det meste. FlexUnit Resultater panelet er der alle resultatene vil bli vist så vel som et sted som lar deg organisere og filtrere testen tilbakemeldinger. Vi vil gå over dette litt senere i opplæringen når vi faktisk har noe å teste Før vi virkelig kan komme inn i testing vi trenger å sette opp vår test klasse. la oss legge til følgende kode i Oppsett Vi trenger også å sette opp noen egenskaper: Her er hva som skjer i dette oppsettet: i rekkefølge for oss å teste våre CamoPropertySheet vi kommer til å trenge noen CSS som en streng. Normalt ville jeg legger i CSS fra en ekstern fil, men siden vi gjør en enkel test jeg bare lage en ny XML blokk og sette CSS tekst innsiden av den første noden. Normalt trenger du ikke å vikle CSS for CamoPropertySheet innsiden av XML, men når du arbeider med store strenger innsiden av redaktøren jeg synes det er enklere å bruke xml siden du kan pakke inn tekst, og den beholder noen formatering. Neste vil du se at vi setter vår rawCSS eiendom til xml sin strengverdi. Dette konverterer xml til en streng. Deretter oppretter vi en ny CamoPropertySheet. Til slutt, forteller vi arket å analysere rawCSS. Det er alt som er å sette opp denne klassen. Oppsettet er forskjellig for hver klasse du tester. Det er viktig å vise at vi gjør minimum for å få en klasse klar til å bli testet, og vi kan ikke teste en klasse uten verdier kan vi I her er hva vår test vil se ut på engelsk:.. La oss erstatte vår testSampleMethod Som du ser får vi en rekke velger navn. Neste vi får samlet og presentere vår første test assetEquals Når du kjører testen bør du se følgende i FlexUnit Resultater panel. Nice, vår test bestått. Vi fikk det nøyaktige antallet velgere som vi har ventet. La oss se på hva hevde tester vi kan bruke I enhetstesting vi kjører påstander. Hver påstand håndterer en bestemt type test. Her er en kort oversikt over de vanligste påstandene du vil sannsynligvis bruke. Nå, før vi tester et eksempel på hver av dem la oss sette opp våre Teardown Dette kommer å være en svært kort skritt, men det er en veldig viktig en. La oss legge til følgende linje i vår Teardown Hva dette egentlig gjør er å fjerne henvisningen til vår CamoPropertySheet så Garbage Collector kan fjerne det Du bør alltid sette opp din Teardown Vi har allerede sett et eksempel på dette før i trinn 7, men la oss gå gjennom og legge til en annen assertEquals For å kjøre testen, la oss legge til følgende metode: Nå kjører Unit Test og sørg for at du velger begge testene fra boksene Nye tester ikke automatisk bli valgt hvis alt gikk bra skal du se en suksess.. og at 2 tester ble kjørt Vi kan gjøre en enkel test for å være sikker på om vi ber om en Selector som ikke eksisterer vi får en falsk verdi Her er hvordan vi skulle gjøre dette med CamoPropertySheet: Her er koden for å utføre testen. Som du kan se, er vi bare ber om en falsk stil navn testSelector Neste vi vil være sikker på at teksten verdien fra vår CamoPropertySheet er aldri null. La oss se på hvordan å strukturere vår test: Her er vår testmetode: Dette er ganske rett frem, så når du kjører testen vi skal nå ha 5 suksesser. Hver gang vi kjører testen kan vi sjekke for å se navnene på våre metodetester ved å klikke på mappen Standard Suite vår FlexUnit Resultater Panel tilbake i Flash Builder I dette neste test skal vi følge opp på den tomme velgertest for å verifisere at alle velger har en selectorName Her er en testmetode:.. De to første linjene er selvforklarende; vi bare be om to velgere og en som vi vet ikke eksisterer. Når vi gjør det hevde men du vil legge merke til vi kjører i to verdier i stedet for den vanlige ene vi har gjort frem til dette punktet. Dette er ikke et unikt eksempel, i virkeligheten hver av de Assert metodene gjør det mulig å passere i hvilket som helst antall verdier som skal testes. Her er vi rett og slett sørge for at selectorA og selectorB ikke er udefinert Her er et eksempel på hvordan man strengt sammenligne to stedene. Her bruker jeg strenger som kanskje ikke er den beste bruken av dette eksempelet, men det er godt å se testen i aksjon. Hva skal vi gjøre? Som du ser vi kaller klone metoden i CamoPropertySheet å få tilbake en eksakt kopi av PropertySheet. Neste vi kjøre det gjennom hevde test ved å ringe toString Nå ønsker vi å teste at når vi ber om en velger, har en egenskap vi forventer. Her er testen:.. Her er en testmetode: Som du kan se her vi venter vårt baseStyle Hver av disse testene blir selvforklarende for hvordan du implementerer dem. La oss se nærmere på hva som skjer når vi ikke klarer en test i løpet av de neste to trinn Vi kommer til å teste for udefinert nå, men Flash Camo har blitt designet for å ikke returnere udefinert. Så følgende test vil mislykkes. La oss se nærmere på hva vi kommer til å teste for. Her er koden for testen: Nå la oss kjøre denne testen og gå til neste trinn for å diskutere resultatene Hvis du gjorde. forrige trinn og løp enheten testen, bør du se følgende i FlexUnit Resultater panelet: Legg merke til hvordan vi har en svikt fra vår testClear Hvis? du dobbeltklikker på den mislykkede testen i testresultater panelet du vil hoppe til kilden av testen som mislyktes. Dette er en fin måte å korrigere feil eller endre testen slik at den ikke mislykkes. Det er ikke mye mer å mislykkes en test da dette. Hver test som svikter vil dukke opp i dette panelet, kan du fortelle panelet for å kun vise mislykkede tester ved å klikke på det røde utropstegn over hvor den forteller deg hvor mange feil du hadde. Nå som vi har feilet denne testen erstatte det med følgende: Hvis du kjører testen på nytt vil du se at det vil passere. Nå har 7 av 7 bestått testene, og denne klassen er vellykket jobbet. La oss snakke om å sette opp enheten tester for dine egne klasser Frem til dette punktet har vi testet en ferdigbygd bibliotek, men du kan være interessert i hvordan dette vil fungere på dine egne klasser. Vi kommer til å endre doc klassen litt deretter kjøre en tilpasset enhet test på den. For å komme i gang, erstatte all koden i UnitTestIntro klassen med følgende: Når du har koden på plass, høyreklikker du på UnitTestIntro Hotell og velg New > Test Case Class. Hvis du ser på veiviseren denne tiden vil du se alle feltene er fylt ut for oss: Denne gangen, i stedet for å klikke Finish, traff neste og se på følgende vindu: Her kan du velge alle de offentlige metoder i den klassen for å teste. Legg merke til hvordan våre kundeskaffere for fornavn og etternavn er ikke en del av denne listen. Enhetstesting kan bare utføres på offentlige metoder. Dessuten vil du se hver arvet metode i klassen så vi har Sprite /Displayobject metoder her siden vår doc klasse strekker Sprite. Velg isLoggedIn Hotell og treffer finish. Hvis du blar ned til bunnen av den nye testen klassen som nettopp ble generert du får se det automatisk har lagt inn en Testmetode for isLoggedIn. Når du skal teste din egen kode Flash Builder kan hjelpe automatisere prosessen med stillaser testene. Dette er en stor hjelp når du arbeider med store klasser som har mange metoder Nå bør du ha en solid forståelse av hvordan Unit Testing i Flash Builder fungerer. Du kan selv være klar til å begynne å sette opp din egen test. Det er mange ting jeg ikke var i stand til å dekke i denne korte opplæringen så her er noen ting å huske på når du oppretter testene. Som du kan se, sette opp Unit Testing er veldig enkelt, men lage applikasjoner kretser rundt Test Driven Development er en kunstform i seg selv. Forhåpentligvis etter denne introen vil du være komfortabel å sette opp en enkel test for å bekrefte at koden fungerer som forventet. Som du stole mer og mer på enhetstesting antall feil i koden din vil dramatisk gå ned. Så lenge du husker å kode mot passerer en test, holde dine metoder små og validere din enhet tester ofte, vil du være godt på vei til å bygge mer stabil kode. Takk for lesing. Anmeldelser
mappe inne i vårt prosjekt:
Trinn 2:. Utarbeidelse en Plan
. Jeg tror jeg ser en annen definisjon kommer opp:
Opprett en forekomst av en CamoPropertySheet
Valider at det kan analysere CSS
Test antall.. velgere fant den.
Test at CamoPropertySheet kan konverteres tilbake til en streng.
Test hva som skjer når vi ber om en velger som ikke ble funnet.
Valider avklarer en CamoPropertySheet.
Trinn 3:. Opprette Vår første test
. Du kan ikke endre dette, og sannsynligvis ikke burde. Alt dette gjør er å utvide basen test klasse fra Unit Test Framework. Neste vil du se noen boksene for kodegenerering. La alle disse merket av som standard. Endelig er det et felt for klasse vi ønsker å teste
Navn: CamoPropertySheetTestClass til test: camo.core .property.CamoPropertySheet
Trinn 4. : Anatomy of a Testcase klasse
som er satt til verdien av vår CamoPropertySheet. Dette gjør testen for å opprette en forekomst av denne klassen og tvinger kompilatoren for å importere det når vi driver vår test.
. Det er der vi vil opprette en forekomst av vår test klasse, konfigurere den og sørge for at alt er klart for oss å utføre en test.
. Det er der vi vil ødelegge vår test klassen 'eksempel når testen er fullført. Dette er veldig viktig når du kjører flere tester.
som er kommentert ut. Dette er et eksempel på hvordan du ville sette opp en enkelt test.
.
Trinn 5:. Kjøre Unit Test
for eksempel
la oss høyreklikk på prosjektet vårt og velg Kjør som >.; Utfør FlexUnit Test.
Trinn 6:. Sett opp
metode:
Var xml: XML = < css > < [CDATA [/* Dette er en kommentar i CSS-filen * /baseStyle {x: 10px; y: 10px; width: 100px; høyde: 100px; padding: 5px; margin: 10px; } BaseStyle .Button {x: 0px; y: 0px; background-color: # 000000; } #playButton {Background-color: #FFFFFF; background-image: url ('/images /full_screen_background.jpg'); } #fullScreenButton {Background-color: # FF0000; background-image: url ('/images /full_screen_background.jpg'); } #playButton: Over {background-color: # 333333; } Interaktiv {cursor: hand; }]] ≫ < /css >; rawCSS = xml.toString (); sheet = new CamoPropertySheet (); sheet.parseCSS (rawCSS);
privat Var sheet: CamoPropertySheet; private Var rawCSS: String;
Trinn 7: Vår første test
< p> La oss få rett til det. Når en CamoPropertySheet har fått analysert en css streng kan vi be om en rekke Selector navn å kontrollere alt har faktisk blitt analysert. For de som ikke er kjent med CSS sjargong, er en velger navnet på en css stil dvs. baseStyle {...}
ville ha en velger kalt baseStyle
.
Få en liste over velgere fra CamoPropertySheet
Få lengden på velger rekke
Sammenlign lengden verdi til 6 (antall vi forventer returnert)
med følgende metode:.
offentlig funksjon testParseCSS (): void {var velgere: Array = sheet.selectorNames; Var totalt: Antall = selectors.length; assertEquals (total, 6);}
. I neste trinn vil jeg forklare assertMethods i mer detalj, men la oss bare kjøre denne og se om testen går
Trinn 8:. Påstander
assertFalse Anmeldelser -. test for å se om verdien er lik false
assertNotNull Anmeldelser -. test for å se om verdien ikke er lik null
assertNotUndefined
- test hvis verdien ikke er udefinert
assertNull Anmeldelser -.. test hvis verdien er null
assertStrictlyEquals Anmeldelser - test for å se om to verdier strengt lik hverandre
assertTrue Anmeldelser -. test for å se om verdien er sant
assertUndefined Anmeldelser -.. test for å se om verdien er udefinert
metode
Trinn 9:. rive ned
metode etter super.tearDown () Bilde:
ark = null;
spesielt når du kjører flere test klasser eller en stor test suite
Trinn 10:.. Assert lik
. Her er neste test vi skal utføre:
Komprimer CSS tekst (fjern mellomrom, spesialtegn og andre hindringer i css parser kan ikke være i stand til å gjenkjenne) siden CamoPropertySheet komprimerer css test når automatisk det analyseres.
Konverter CamoPropertySheet inn teksten (dette vil være en komprimert versjon av rawCSS vi brukte tidligere).
Sammenlign at CamoPropertySheet teksten er lik vår komprimert css streng. < .no>
offentlig funksjon testToString (): void {var compressedCSS: String = "baseStyle {x: 10; y: 10; width: 100, høyde: 100; padding: 5; margin: 10;} baseStyle .Button{x:0;y:0;background-color:#000000;}#playButton{background-color:#FFFFFF;background-image:url('/images/full_screen_background.jpg');}#fullScreenButton{background-color:#FF0000;background-image:url('/images/full_screen_background.jpg');}#playButton:over{background-color:#333333;}interactive{cursor:hand;}"; assertEquals (sheet.toString (), compressedCSS);}
Trinn 11:.. Hevd False
Lag en anmodning om en velger som ikke eksisterer
Sjekk navnet returnert velgeren er for å se om det tilsvarer "EmptySelector" -. . en konstant på PropertySelector klassen
Assert hvis verdien er falsk
offentlig funksjon testEmptySelector (): void {var Velger: PropertySelector = sheet.getSelector ("testSelector"); Var finnes: Boolean = (selector.selectorName == PropertySelector.DEFAULT_SELECTOR_NAME) false: true; assertFalse (finnes);}
. Vi sjekker for å se om navn velgeren s er standardnavnet brukes når ingen velgeren er funnet. Til slutt passerer vi eksisterer variabelen til assertFalse
metoden. Når du kjører dette bør du nå se 3 passerer til sammen en suksess
Trinn 12:. Hevd Ikke Null
samtale toString
på vår CamoPropertySheets forekomst og test for å se om det ikke er null
offentlig funksjon testCSSValue (): void {assertNotNull (sheet.toString ());}
Trinn 13:. Hevd Ikke Undefined
.
Få en velger som ikke eksisterer.
Få en velger som ikke eksisterer
Test for å se om begge velgere navn ikke er udefinert
offentlig funksjons testSelectorsHaveNames (): void {var selectorA: String = sheet.getSelector ("testSelector") selectorName;. Var selectorB: String = sheet.getSelector ("baseStyle") selectorName;. assertNotUndefined (selectorA, selectorB);}
Trinn 14:. Hevd Strengt lik
klone CamoPropertySheet.
offentlig funksjon testClone (): void {var klone: CamoPropertySheet = sheet.clone () som CamoPropertySheet; assertStrictlyEquals (sheet.toString (), clone.toString ());}
metoden på hver. Hvis den returnerte CSS testen er den samme vi har en suksess for test
Trinn 15:. Hevd Sann
Be om baseStyle
velger
Test for å se om velgeren har egenskapen x
offentlig funksjon testSelectorHasProperty (): void {var Velger: PropertySelector = sheet.getSelector ("baseStyle"); assertTrue (selector.hasOwnProperty ("x"));}
velgeren å ha x eiendommen. Hvis dette finnes kan vi anta at det var riktig analysert fra CSS strengen. Siden det foreligger vi har passert denne testen.
Trinn 16:. Hevd Undefined
Ring klart metoden på CamoPropertySheet.
vil returnere udefinert .
offentlig funksjon testClear (): void {sheet.clear (); assertUndefined (sheet.toString ());}
Trinn 17: Sviktende A Test
metode
offentlig funksjon testClear (): void {sheet.clear (); assertEquals (sheet.toString (), "");}
Trinn 18:. Auto Genera Test Classes
pakke {import flash.display.Sprite; public class UnitTestIntro strekker Sprite {private Var _firstName: String; private Var _lastName: String; private Var _loggedIn: Boolean; offentlig funksjon UnitTestIntro () {_firstName = "Jesse"; _lastName = "Freeman"; } Offentlig funksjon får fornavn (): String {return _firstName; } Offentlig funksjon får lastname (): String {return _lastName; } Offentlig funksjon isLoggedIn (): Boolean {return _loggedIn; }}}
Trinn 19:. Best Practices
Konklusjon