Bedre og renere kode: Enhetstesting med Xcode

Her er et eksempel på å legge til en funksjon i en app og en enhetstesttilfelle samtidig. Vi vil legge til funksjonen i Apples enhetstestprøve for å vise hvor enkelt dette er å gjøre.

OCUnit-testenhetens rammeverk integrert i Xcode deler enhetstester i applikasjons- og logikktester. Logikktester trener mindre kodenheter og kjøres bare i iOS-simulatoren. Søknadstester kjøres i sammenheng med applikasjonen. Rent praktisk betyr dette at kontrollkontrollmetoder utøves. Applikasjonstester kjøres i simulatoren og på enheten.

Vi vil her fokusere på applikasjonstester. All kode skal testes, men foreløpig vil vi ta en ovenfra og ned tilnærming og starte med applikasjonsinnganger og -utganger. Dette er den beste metoden å ta når du legger til enhetstester til en app i midten eller slutten av utviklingssyklusen.

Enhetstesting av apper og rammer

Det første trinnet er å laste ned Unit Testing-prøven fra Apple Developer-nettstedet.

Flytt UnitTests.zip fra nedlastingsmappen og pakke ut. Gå til iOS_Calc- mappen under UnitTests og åpne Xcode iOS_Calc- prosjektet. Etter at du har åpnet prosjektet, kan det hende du ser noen advarsler. Disse kan enkelt fikses (f.eks. Opprette standardoppstartsbildet på 568H netthinnen).

IOS_Calc-appen er en enkel kalkulator. Logikktestene utøver beregningene og applikasjonstestene utøver brukeren ved å trykke på kalkulatorknappene. En utilsiktet bivirkning er at tastaturet vises hvis du trykker på feltet som viser beregningene. En seriøs app vil deaktivere tastatur, men vi vil gjøre det mulig å bruke tastaturet til å legge inn beregninger. Dette er noe foragt fordi tastaturet ikke er så brukbart som knappene, men her demonstrerer vi bare enhetstesting, ikke en iPhone-kalkulator.

CalcView.xib

Vi kan gjøre standardtastaturet litt mer brukbart. Velg CalcView.xib-filen i Project Navigator slik at den vises i Xib-redigereren. Velg Attributtsinspektør og oppdater tastaturegenskaper som følger: Store bokstaver: Ingen, Rettelser: Nei, Tastatur: Tall og tegnsetting.

UITextFieldDelegate

Kalkulatorens visningsfelt er et UITextField. La oss stille feltets UITextFieldDelegate til eieren av Xib-filen, visningskontrolleren CalcViewController . Når CalcView.xib vises i Xib-redigereren, velger du Tilkoblingsinspektøren. Dra en forbindelse fra delegaten til venstre til filens eierplassholder til høyre.

Vi er ferdige med CalcView Xib. Vi vil nå implementere UITextFieldDelegate-protokollmetoder. Velg iOS_CalcViewController.m i Project Navigator slik at CalcViewController vises i redigeringsprogrammet.

For det første utvider CalcViewController-grensesnittet som en formalitet ved å erklære at det implementerer UITextFieldDelegate-protokollen.

Vi implementerer to UITextField delegatmetoder, shouldChangeCharactersInRange og textFieldShouldReturn .

ShouldChangeCharactersInRange- metoden kalles for hvert tegn brukeren legger inn i visningsfeltet og lar utvikleren bestemme om tegnet skal vises. For vår metode vil vi alltid returnere NEI, fordi vi bare vil vise resultatet av å legge inn det tegnet i kalkulatoren.

Før vi setter inn kalkulatorens inngang, må vi sørge for at tegnet er gyldig. Kalkulatoren aksepterer bare sifrene 0 til 9, desimaltallet, legge til, trekke fra, dele og multiplisere tegn, og C for å fjerne, og D for sletting. Først sjekker vi om brukeren trykket på slettetasten. I så fall er strengen tom, så vi setter strengen til "D."

Etter å ha sjekket at strengen inneholder et tegn kalkulatoren godtar med rangeOfCharacterFromSet, setter vi kalkulatorinngangen til strengen og setter visningsfeltet til kalkulatorens utgangsverdi.

TextFieldShouldReturn- metoden implementeres for å avvise tastaturet når brukeren banker på den gjort tasten.

Enhetstesten

Vi tester ved å legge til en metode med et navn som begynner med "test" til iOS_CalcTests-klassen. Rammeverket kaller automatisk oppsettmetoden før du kjører test saken. I oppsett hentes CalcViewController fra søknadsdelegaten.

CalcViewController har ikke en offentlig metode for å teste å legge inn beregninger direkte i visningsfeltet med tastaturet. Men fordi vi koblet UITextField-delegat til CalcViewController i XIB, kan vi teste ved å ringe delegatens shouldChangeCharactersInRange- metode direkte. Vi får delegaten fra visningskontrollørens visningsfelt og simulerer brukeren som tapper på tastaturet ved å ringe shouldChangeCharactersInRange ett tegn om gangen.

Hvis på slutten av beregningene STAssertTrue- makro mislykkes sender rammeverket en feilmelding. Feil vises i utkonsollen og navigasjonsprogrammene og loggen. Makrotereferansen til enhetens testresultat er tilgjengelig i iOS Developer Library.

Hvis det er et problem med søknadstesten din, kan du angi et brytepunkt for å gå gjennom den. Imidlertid fant jeg ut at breakpoints bare fungerer når jeg kjører testen i simulatoren.

Løpe

Nå er det på tide å kjøre applikasjonsenhetstestene. Det er to måter å kjøre testene på. Det enkleste er å velge Test fra Xcode-produktmenyen. Den andre måten er å høyreklikke på Kjør-knappen i øvre venstre hjørne. I Test-dialogboksen som vises, velg Test fra den venstre konfigurasjonskolonnen og klikk på Test-knappen nederst.

Xcode Unit Testing Guide hevder at applikasjonstester lar deg teste at Xib- og storyboard-tilkoblingene dine forblir på plass når du utvikler appen din. Jeg fant ikke at dette var sant. Visningskontrollmetoder kan kalles direkte, men bare en simulering av brukertastknapper og tastaturtaster utøver tilkoblingene. For det trenger du UI-automatiseringsinstrumentet.

Flere iOS Unit Test Framework

  • GHUnit
  • OCMock
  • OCHamcrest
  • OCMockito
  • kiwi

Konklusjon

Det er viktig å utvikle enhetstester når du utvikler appen din. Det skal imidlertid være greit å skrive koden først og deretter skrive testene. Men sørg for at alle kodebaner er dekket. Du kan oppdage at testen ikke kan skrives uten å skrive koden på nytt. Men etter å ha skrevet koden på nytt skal den være renere. Dette er Test Driven Development i ånd, fordi målet er renere kode.

Les også:

  • Beste praksis: Utvikle heterogene iOS-apper
  • Utvikle iOS-appene dine, ellers vil de dø i naturen
  • Perfekt appen din med Xcode-verktøy for iOS-utviklere

© Copyright 2021 | pepebotifarra.com