Guiden för nybörjare till enhetstestning med Xcode

Mjukvaruutveckling är en komplex process. Förutom att behärska de olika verktygen och programmeringsspråken gäller det också att förstå olika roller inom mjukvaruutveckling. Som de flesta av oss vet innebär bra projekt inte bara kodning. Stora projekt involverar även andra resurser för kravinsamling, prototypframställning och testning.

Processen att validera kod kallas ofta för kvalitetssäkring. Uttrycket är dock något missvisande. Istället för att säkerställa kodkvaliteten är det verkliga målet att mäta den – ofta medan projektet utvecklas. Denna subtila skillnad, som även kallas testdriven utveckling (t.ex. TDD), kan ses när man undersöker kvalitetsfunktionens roller. Dessa inkluderar följande:

Varför enhetstester?

Som framgår grupperas kvalitetsmätning ofta i automatiserade och manuella aktiviteter. Som en person som är intresserad av algoritmer arbetar ytterligare kod som kallas enhetstester för att testa ditt primära programvaruprojekt. Enhetstester skrivs vanligtvis av utvecklare och står i fokus i en TDD-miljö. Exempelvis är enhetstester viktiga för utvecklingen av den här boken. Med hjälp av iOS XCTest Framework ska vi gå igenom hur enhetstester fungerar i Swift.

ARBETE MED XCTEST

Om du har bekantat dig med Swift-koncepten som gåtts igenom i boken bör det vara enkelt att lära sig skriva enhetstester. Som vi diskuterat fungerar enhetstester för att träna kod som saknar ett slutanvändargränssnitt. För att illustrera detta ska vi gå igenom testfall som tränar en stackdatastruktur.

Och även om boken inte går igenom detaljerna i den integrerade utvecklingsmiljön (IDE) Xcode, bör det noteras att tester kan exekveras per funktion, klass eller mål. Med hjälp av Xcode upprättas enhetstester genom att lägga till ett nytt testmål i ditt primära kodprojekt. När enhetstesterna väl är konfigurerade kan de exekveras från IDE eller kommandoraden.

TESTREGLER

Och även om det inte är ett krav anses det vara bästa praxis om enhetstestfilen nära överensstämmer med namnkonventionerna för vår(a) implementeringsfil(er). I vårt fall använder vi StackTest.swift. För att få tillgång till primära Stack-metoder och egenskaper från vårt huvudprojekt kommer filen också att innehålla ett testbart importmeddelande:

Likt andra ramverk för enhetstest fungerar XCTest genom att integrera Swift-språkets funktioner med specifika testrelaterade funktioner. De väsentliga metoderna grupperas tillsammans som assertions. När kompilatorn skapar tester känner kompilatorn igen enhetstester med funktioner som föregås av nyckelordet test.

I motsats till vanliga Swift-funktioner är enhetstester avsiktligt utformade som fristående enheter av logik. Som ett resultat av detta tar testmetoderna inte emot argument och returnerar inga värden. Alternativt kan testdata hanteras genom hjälpmetoder och initialiserings-/avbrottssekvenser. Tänk på följande:

TESTPLANERING

Som diskuterats är den huvudsakliga operationen för en Stack-datastruktur att lägga till och ta bort objekt. Istället för att skriva en enda funktion för att testa alla operationer isolerar vår testplan varje viktig Stack-operation med ett eget test. Som framgår av testPushStack kontrollerar påståendet XCTAssertTrue att initialiseringen av variabeln Stack.count är korrekt. Nästa steg innebär att man tränar Stack.push genom att iterera genom arrayen med numberList-objekt. För att verifiera att varje test använder samma data, fylls numberList på med hjälp av XCTestCase-klassens inställningsmetod.

Med enhetstestet för att lägga till Stack-objekt implementerat kan vi skriva nästa test för att ta bort objekt:

Lämna ett svar

Din e-postadress kommer inte publiceras.