Hvad er enhedstestning?
ENHEDSTEST er en type softwaretest, hvor individuelle enheder eller komponenter i en software testes. Formålet er at validere, at hver enhed af softwarekoden fungerer som forventet. Enhedstest udføres under udviklingen (kodningsfasen) af en applikation fra udviklerne. Enhedstest isolerer et afsnit med kode og kontrollerer dets rigtighed. En enhed kan være en individuel funktion, metode, procedure, modul eller objekt.
I SDLC, STLC, V Model er enhedstest det første niveau af test udført inden integrationstest. Enhedstest er en WhiteBox testteknik, der normalt udføres af udvikleren. Selvom QA-ingeniører i en praktisk verden på grund af tidsnød eller modvilje hos udviklere til test udfører de også enhedstest.
I denne vejledning lærer du-
- Hvorfor test af enheder?
- Sådan udføres enhedstest
- Enhedstestteknikker
- Enhedstestværktøjer
- Test Driven Development (TDD) & Unit Testing
- Enhedstest myte
- Enhedstest Fordel
- Enhedstest Ulemper
- Enhedstest af bedste praksis
Hvorfor test af enheder?
Enhedstestning er vigtig, fordi softwareudviklere undertiden prøver at spare tid på at lave minimal enhedstest, og dette er myte, fordi upassende enhedstestning fører til høje omkostninger ved mangelfixning under Systemtest, Integrationstest og endda Betatestning, efter at applikationen er bygget. Hvis korrekt enhedstest udføres i den tidlige udvikling, sparer det tid og penge i sidste ende.
Her er de vigtigste grunde til at udføre enhedstest i software engineering:

- Enhedstest hjælper med at rette bugs tidligt i udviklingscyklussen og spare omkostninger.
- Det hjælper udviklerne med at forstå testkodebasen og giver dem mulighed for hurtigt at foretage ændringer
- Gode enhedstests fungerer som projektdokumentation
- Enhedstest hjælper med genbrug af kode. Migrer både din kode og dine tests til dit nye projekt. Tilpas koden, indtil testene kører igen.
Sådan udføres enhedstest
For at udføre Unit Testing skriver udviklere et afsnit af kode for at teste en bestemt funktion i softwareapplikation. Udviklere kan også isolere denne funktion for at teste mere stringent, hvilket afslører unødvendige afhængigheder mellem funktion, der testes og andre enheder, så afhængighederne kan elimineres. Udviklere bruger generelt UnitTest-rammen til at udvikle automatiserede testcases til enhedstest.
Enhedstestning er af to typer
- brugervejledning
- Automatiseret
Enhedstest er almindeligt automatiseret, men kan stadig udføres manuelt. Software Engineering favoriserer ikke den ene frem for den anden, men automatisering foretrækkes. En manuel tilgang til enhedstest kan anvende et trin-for-trin instruktionsdokument.
Under den automatiserede tilgang-
- En udvikler skriver et afsnit med kode i applikationen bare for at teste funktionen. De vil senere kommentere og endelig fjerne testkoden, når applikationen implementeres.
- En udvikler kunne også isolere funktionen for at teste den strengere. Dette er en mere grundig enhedstestpraksis, der involverer kopiering og indsætning af kode til sit eget testmiljø end dets naturlige miljø. Isolering af koden hjælper med at afsløre unødvendige afhængigheder mellem koden, der testes, og andre enheder eller datarum i produktet. Disse afhængigheder kan derefter elimineres.
- En koder bruger generelt en UnitTest Framework til at udvikle automatiserede testsager. Ved hjælp af en automatiseringsramme koder udvikleren kriterier i testen for at verificere korrektheden af koden. Under udførelsen af testsagerne logger rammen på manglende testsager. Mange rammer vil også automatisk markere og rapportere sammenfattet disse mislykkede testsager. Afhængig af sværhedsgraden af en fiasko kan rammen stoppe efterfølgende test.
- Workflowet for enhedstestning er 1) Opret testtilfælde 2) Gennemgang / omarbejde 3) Baseline 4) Udfør testtilfælde.
Enhedstestteknikker
De Enhed testteknikker hovedsageligt opdeles i tre dele, der er sorte boks test, der involverer testning af brugergrænseflade sammen med input og output, hvid boks test, der involverer at teste den funktionelle adfærd programmet og grå boks test, der bruges til at udføre test suiter, testmetoder, testtilfælde og udførelse af risikoanalyse.
Kodedækningsteknikker anvendt i enhedstest er anført nedenfor:
- Erklæringens dækning
- Beslutningsdækning
- Filialdækning
- Tilstandsdækning
- Endelig maskindækning
For mere information, se https://www.guru99.com/code-coverage.html
Enhedstesteksempel: Mock Objects
Enhedstest afhænger af, at mock-objekter oprettes for at teste sektioner af kode, der endnu ikke er en del af en komplet applikation. Mock objekter udfyldes for de manglende dele af programmet.
For eksempel kan du have en funktion, der har brug for variabler eller objekter, der endnu ikke er oprettet. Ved enhedstestning tages der højde for dem i form af mock-objekter, der udelukkende er oprettet med henblik på enhedstestningen udført på dette kodesektion.
Enhedstestværktøjer
Der er flere automatiserede enhedstestsoftware til rådighed til at hjælpe med enhedstest. Vi giver et par eksempler nedenfor:
- Junit: Junit er et gratis testværktøj, der bruges til Java-programmeringssprog. Det giver påstande om at identificere testmetode. Dette værktøj test data først og derefter indsat i kodestykket.
- NUnit: NUnit er almindeligt anvendt enhedstestningsrammebrug til alle .net-sprog. Det er et open source-værktøj, der gør det muligt at skrive scripts manuelt. Det understøtter datadrevne tests, der kan køre parallelt.
- JMockit: JMockit er open source-enhedstestværktøj. Det er et kodedækningsværktøj med linje- og sti-metrics. Det giver mulighed for mocking API med optagelses- og verifikationssyntaks. Dette værktøj tilbyder liniedækning, stigdækning og datadækning.
- EMMA: EMMA er et open source-værktøjssæt til analyse og rapportering af kode skrevet på Java-sprog. Emma understøtter dækningstyper som metode, linje, grundlæggende blok. Det er Java-baseret, så det er uden eksternt biblioteksafhængighed og kan få adgang til kildekoden.
- PHPUnit: PHPUnit er et enhedstestværktøj til PHP-programmør. Det tager små portioner kode, der kaldes enheder, og tester hver af dem separat. Værktøjet giver også udviklere mulighed for at bruge foruddefinerede påstandsmetoder til at hævde, at et system opfører sig på en bestemt måde.
Disse er blot nogle få af de tilgængelige enhedstestværktøjer. Der er meget mere, især for C-sprog og Java, men du er sikker på at finde et enhedstestværktøj til dine programmeringsbehov uanset hvilket sprog du bruger.
Test Driven Development (TDD) & Unit Testing
Enhedstest i TDD involverer en omfattende brug af testrammer. En enhedstestramme bruges til at oprette automatiserede enhedstests. Enhedstestrammer er ikke unikke for TDD, men de er vigtige for det. Nedenfor ser vi på nogle af, hvad TDD bringer til verden af enhedstest:
- Test skrives før koden
- Stol stærkt på testrammer
- Alle klasser i applikationerne testes
- Hurtig og nem integration er muliggjort
Enhedstest myte
Myte: Det kræver tid, og jeg er altid overplanlagt. Min kode er bunnsolid! Jeg har ikke brug for enhedstest.
Myter er i sagens natur falske antagelser. Disse antagelser fører til en ond cirkel som følger -
Sandheden er Enhedstest øger udviklingshastigheden.
Programmører tror, at integrationstest vil fange alle fejl og ikke udføre enhedstesten. Når enheder er integreret, tager meget enkle fejl, som meget let kunne findes og fikseres i enhedstestet, meget lang tid at spore og rette.
Enhedstest Fordel
- Udviklere, der ønsker at lære, hvilken funktionalitet der leveres af en enhed, og hvordan man bruger den, kan se på enhedstestene for at få en grundlæggende forståelse af enhedens API.
- Enhedstest gør det muligt for programmøren at refaktorkode på et senere tidspunkt og sørge for, at modulet stadig fungerer korrekt (dvs. regressionstest). Proceduren er at skrive testcases for alle funktioner og metoder, så hver gang en ændring forårsager en fejl, kan den hurtigt identificeres og løses.
- På grund af enhedstestens modulære karakter kan vi teste dele af projektet uden at vente på, at andre skal gennemføres.
Enhedstest Ulemper
- Enhedstest kan ikke forventes at fange alle fejl i et program. Det er ikke muligt at evaluere alle eksekveringsstier, selv i de mest trivielle programmer
- Enhedstest fokuserer i sagens natur på en kodeenhed. Derfor kan den ikke fange integrationsfejl eller brede systemfejl.
Det anbefales, at enhedstest bruges sammen med andre testaktiviteter.
Enhedstest af bedste praksis
- Enhedstest tilfælde skal være uafhængige. I tilfælde af forbedringer eller ændringer i kravene bør enhedstesttilfælde ikke påvirkes.
- Test kun én kode ad gangen.
- Følg klare og ensartede navngivningskonventioner til dine enhedstest
- I tilfælde af en ændring i kode i et hvilket som helst modul skal du sikre dig, at der er en tilsvarende enhed Testcase til modulet, og at modulet består testene, før du ændrer implementeringen
- Fejl identificeret under enhedstest skal rettes, inden de fortsætter til næste fase i SDLC
- Vedtag en "test som din kode" tilgang. Jo mere kode du skriver uden at teste, jo flere stier skal du kontrollere for fejl.

Resumé
- ENHEDSTEST er defineret som en type softwaretest, hvor individuelle enheder eller komponenter i en software testes.
- Som du kan se, kan der være meget involveret i enhedstest. Det kan være komplekst eller ret simpelt afhængigt af den applikation, der testes, og de anvendte teststrategier, værktøjer og filosofier. Enhedstest er altid nødvendigt på et eller andet niveau. Det er en sikkerhed.