move-left Back
🌍 All Regions
Quality Assurance Engineering

Vad är enhetstestning och integrationstestning?

Något som ofta diskuteras, kanske framför allt i samband med testautomatisering, är enhets- och integrationstester. Men vad innebär dessa tester i praktiken och hur används de? Det får du reda på i det här blogginlägget!

Enhetstester – testar de minsta enheterna

Enhetstester testar de minsta enheterna i en applikation, så att vi vet att de fungerar som avsett. Dessa tester är starkt kopplade till den faktiska implementeringen, snarare än att verifiera om ett system fungerar som avsett ur ett driftsperspektiv. Vid testdriven utveckling används enhetstester för att definiera hur en enhet ska utformas och för att verifiera att givna ingångsparametrar och utgångsvillkor ger korrekta resultat. Istället för att först skriva produktionskod och sedan enhetstester, skrivs enhetstesterna först – vilka naturligtvis varken går att köra eller visar korrekta resultat. Utifrån den situationen tillåts produktionskoden att växa genom att man skapar det som behövs för att enhetstestet ska lyckas. Enhetstestning bör ses som ett viktigt komplement under utvecklingen, snarare än en typ av test som i sig är tillräckligt för att verifiera korrekt kvalitet.

Integrationstester – tester som kontrollerar att alla enheter fungerar tillsammans

Integrationstestning kontrollerar att alla enheter i en applikation fungerar tillsammans. I dessa tester kan applikationen anropas utifrån, precis som den är avsedd att användas av användaren eller andra system. Detta innebär att de inte är kopplade till lösningen på samma sätt som enhetstester, och därmed behöver de inte påverkas i samma utsträckning, och lösningen behöver till exempel inte refaktoreras. Integrationstester är perfekta för regressionstestning och kan utformas för att upptäcka buggar så tidigt som möjligt. Att säkerställa applikationens testbarhet för dessa tester är en förutsättning. Hur ska man autentisera sig mot en applikation som ska integrationstestas, och hur hanteras applikationskonfigurationen om tjänsten ska testas lokalt på en arbetsdator?

Låt oss göra en enkel analogi:

En intern komponent i en applikation kan jämföras med en del under motorhuven på din bil, till exempel fläktremmen. För att säkerställa fläktremmens kvalitet testas den separat, där egenskaper som hållfasthet, livslängd och friktion i materialet kontrolleras. För föraren är det dock inte viktigt att det finns ett fläktrem i bilen, utan snarare att bilen är robust och därmed behöver en fungerande motorkylning. Om biltillverkaren skulle utveckla en helt ny metod för att kyla motorn, skulle de interna testerna av fläktremmarna vara meningslösa, men testerna av bilen skulle vara oförändrade ur förarens perspektiv. Man skulle kunna använda samma förarbaserade tester för att bedöma att bilen kör lika bra eller bättre med det uppdaterade kylsystemet.

Samma teknik trots olika syften med testerna

Även om syftet med enhets- och integrationstestning är olika kan de ofta byggas med hjälp av samma tekniker. Enhetstester måste, till sin natur, skrivas i samma programmeringsspråk som den kod som testas för att vara mest effektiva. Detta hjälper oss att upptäcka kompileringsfel som uppstår till följd av uppdateringar, vilket gör återkopplingen så snabb som möjligt. Dessa tester har sällan eller få beroenden av infrastrukturen och är därmed fria från utmaningar kring testmiljöer, testdata och beroenden av andra system. Detta gör enhetstester till den mest tillförlitliga testtypen.

Genom att använda rätt verktyg kan du i många fall uppnå samma fördelar vid integrationstestning. Det krävs vissa förutsättningar för att kunna anropa applikationen utifrån och genomföra testet, vilket innebär att rätt klientstöd och mocking-teknik måste användas. Det är också vanligt att man måste köra hela applikationen som avsett för att få tillgång till hela teknikstacken.

Sammanfattning

Enhetstestning och integrationstestning är två viktiga förutsättningar för att utveckla programvara med rätt kvalitet. Tillsammans utgör de de tidigaste automatiska testerna, vilka är absoluta förutsättningar för att kunna leverera ny programvara med hög frekvens på kort tid. Genom att välja rätt verktyg får du ett stort förtroende för dessa tester. De kommer att ge stöd för ny utveckling och en välgrundad känsla av kvalitet för ändringar.

Tags

Quality Assurance Engineering All Industries All Business Units