Fremskritt innen testing med Xcode 7 og Swift 2

Advances i testing med Xcode 7 og Swift 2
33
Del
9
Del

Denne Cyber ​​Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

I de tidlige dagene av iOS, verktøy for å forenkle testing var ikke et stort fokus på Apples Developer Tools team. Dette har gradvis endret seg i løpet av årene med innføringen av XCTest rammeverk og nå nylig, støtte for asynkron og ytelsestesting.

Med Xcode 7 og Swift 2, Apple tar et annet stort sprang å forbedre testing i Xcode . I denne opplæringen, kommer jeg til å gå gjennom tre betydelige tillegg som vil gjøre testing enklere og morsommere.

1. Access Control

I Swift 1, utviklere har til å hoppe gjennom en rekke ringer for å teste koden sin. For eksempel har en enhet test mål kun tilgang til offentlige virksomheter av en annen modul. Dette er ikke overraskende hvis du er kjent med Swifts adgangskontroll. Testing interne rutiner, men blir en smerte.

Apples Swift teamet var klar over dette problemet, og som et resultat, Swift 2 introduserertestable attributtet for å gjøre testing mindre smertefull. Medtestable attributt, har enheten test målet tilgang til alle interne enhet av en annen modul. Følgende kodebit viser hvordan du bruker dentestable attributtet.
testable Import AnotherModule

La oss lage en enkel prosjekt for å se hvordan det fungerer. Åpne Xcode 7, oppretter et prosjekt basert på Enkel visning Application mal, og merk av i boksen merket Inkluder enhet tester.

For å vise hvordantestable attributtet fungerer, jeg har implementert en struktur som heter User. Den har to lagrede egenskaper, fornavn og etternavn, og en privat beregnede eiendoms, etter fullt navn import Foundationstruct User {var lastname:. String = "" var Fornavn: String = "" var fullt navn: String {får {return fornavn + " "+ lastname}}}

Fordi vi ikke spesifisere tilgangsnivået for den fullt navn beregnet eiendom, er det tilgangsnivået er interne. Hvis vi ønsker å enhetstest fullt navn, kunne vi merke den som offentlig. Dette er ikke bra, og det Tap hensikten med Swifts adgangskontroll.

Heldigvis Swift to løser dette problemet medtestable attributt. Følgende kode viser hvordantestable attributtet brukes. Med prefikset import uttalelse medtestable attributt, kan vi få tilgang til fullt navn egenskap av brukerstrukturen i testFullName metoden
import XCTest @ testbare import Testingclass TestingTests. XCTestCase {overstyring func setup () {super.setUp () } overstyring func Teardown () {super.tearDown ()} func testFullName () {var meg = Bruker () me.firstName = "Bart" me.lastName = "Jacobs" XCTAssertEqual (me.fullName, "Bart Jacobs", " Det fulle navnet bør være lik \\ "Bart Jacobs \\". ")}}

Merk at dokumentasjonen sier klart og tydelig attestable attributtet kan bare gjøre jobben sin hvis produktet er kompilert med testing aktivert. Med andre ord, du kan ikke og bør ikke bruketestable attributt for andre enn testing formål.

2. Kode Dekning

Hvis du tester koden du skriver, så er du på rett spor. Men det er like viktig å forstå hvor godt de testene du skrive dekke inn koden du tror de dekker. Mens tidligere versjoner av Xcode har hatt støtte for kodedekning til en viss grad, har det alltid vært litt pirkete å få det til å fungere. Det er ikke lenger tilfelle med Xcode 7.

I stedet for å vise deg en haug med skjermbilder, vil jeg gjerne gå deg gjennom trinnene som er involvert for å aktivere koden dekning i en Xcode prosjekt. La oss ta prosjektet vi laget et par minutter siden som et eksempel.

For å aktivere kodedekning, vi trenger bare å redigere den aktive ordningen. Klikk på ordningen i øverst til venstre og velg Rediger Scheme ....

For å aktivere kodedekning, velger Test fra venstre og kryss av i boksen merket Samle koden dekning. Det er alt. Hvis du har prøvd å aktivere koden dekning i tidligere versjoner av Xcode, så jeg er sikker på at du er glad for å se hvor enkelt det er å muliggjøre kodedekning i Xcode 7.

Kjør enheten testene ved å trykke Kommando-U eller velge Test fra Xcode Product menyen. Når testene er ferdig med å kjøre, åpner Rapporter Navigator til høyre og velg kategorien Dekning på toppen. Dette viser hvor godt enhet tester dekke inn koden du har skrevet.

Det ser ut som vi har gjort en ganske god jobb enhetstesting bruksstruktur. Det blir bedre om. Ser du den lille pilen følgende metodenavnet? Hvis du klikker på den, vil Xcode ta deg til kildekoden enheten testen testet. Fordi Xcode har samlet dekning data, kan det også vise at dekningen data i kildekoden editor.

Dekningen data vises på høyre side av kildekoden editor. Tallet i rennesteinen på høyre angir hvor ofte enheten testene har utløst det spesifikke rutine.

Kode som ikke ble henrettet under testene er uthevet. Dette er svært nyttig for å skrive bedre tester og for å forbedre koden dekning av testsuiter.

3. UI Testing

En av de mest etterlengtede funksjonene i Xcode 7 er integreringen av brukergrensesnitt testing. I det siste har jeg jobbet med KIF og UI Automation, men jeg har aldri vært helt fornøyd med enten løsning. Xcode UI testing ser ut som løsningen mange av oss har ventet på.

XCTest Work

Brukergrensesnitt testing i Xcode 7 utdyper Apples robust XCTest rammeverk gjennom tilførsel av tre klasser, XCUIApplication, XCUIElement, og XCUIElementQuery. For å gjøre etableringen av brukergrensesnitt tester enklere, Xcode 7 gir mulighet til å ta opp tester. Dette er en svært kraftig funksjon som noen av dere kanskje allerede være kjent med hvis du noen gang har jobbet med Apples UI Automation.

Som med UI Automation, avhengig Xcode brukergrensesnitt testing tungt på tilgjengelighet. Det er derfor viktigere enn noensinne å bruke tid på å gjøre programmene mer tilgjengelig for brukere med nedsatt funksjonsevne.

Merk at UI testing er bare tilgjengelig på iOS 9 og OS X 10.11. Apple understreker at enheten tester og brukerinte tester utfyller hverandre. Med andre ord, det er ikke et spørsmål om å velge det ene eller det andre.

Selv om det er enkelt å opprette brukerinte tester for et program, er du ikke forventet å skrive UI tester for alle mulige scenario eller bruke saken. Begynn ved å fokusere på felles og kritiske bruksmåter, for eksempel bruker onboarding.

testrapporter

Testrapporter har også vesentlig forbedret. Det jeg liker mest om de nye tester rapportene er tillegg av skjermbilder for mislykkede UI tester. I tillegg til en feilmelding, tar Xcode et øyeblikksbilde av programmets brukergrensesnitt når en UI testen mislykkes. Dette gjør det svært enkelt å finne og løse problemet.

Les mer i vår Testing Med Swift Course

Hvis du ønsker å lære mer om testing med Swift og XCTest rammeverk, så jeg oppfordrer deg å ta en titt på Derek Jensen kurs om enhetstesting med Swift og XCTest.

Konklusjon

Apple har lagt mye arbeid i å forbedre testing og debugging med utgivelsen av Xcode 7. Mens integrert kodedekning er fantastisk, tillegg av brukergrensesnitt testing kommer til å ha en enda større effekt.

Jeg håper denne korte oversikten har vekke appetitten for testing i Xcode 7. Vi vil være som dekker disse nye funksjonene i nærmere i fremtidige tutorials.



Previous:
Next Page: