Python AutoSpec hån

Python AutoSpec hån
"Når du utvikler tester, er hån og hån som hånlig nyttig siden de gjør det mulig å skille den henvendte referansen ut av avhengighetene, noe som resulterer i færre sprø tester. Ved å inkludere hån i enhetstestene, kan vi være sikre på at eventuelle feil vil være forårsaket av en modifisering av hvordan testens mål blir implementert. Konfigurasjonen av hån kan imidlertid føre til tester som passerer når de trenger å mislykkes. Innenfor denne artikkelen vil vi bruke noen eksempler for å illustrere arbeidet med Autospace Mocking i Python.”

Eksempel 01

La oss begynne med den første illustrasjonen. Kalkulatoren.PY -modulen inkluderer de påfølgende kodelinjene. I første linje definerte vi tillegg av funksjonen og multiplisert for klassekalkulatoren. To tall multipliseres sammen med den andre funksjonen som heter “Multiply”; Tilsvarende brukes den første funksjonen for å få summen av de to tallene. Begge funksjonene returnerer bare tillegget og noen av de medfølgende tallene; De skriver ikke ut noen utdata.

Vi har bygget to modulfunksjoner utenfor klassen der klasseobjekter av kalkulatortypen er opprettet, og tilleggs- og multiplikasjonsmetodene i kalkulatorklassen kalles. Kontroller koden i det festede bildet.

Summen og multiplikasjonsfunksjonene fra kalkulatoren.PY -modul vil bli brukt i den enkle modulen vi konstruerer, testkalkulator.py. Koden er utrolig enkel; Vi importerer bare multiplikasjons- og summetoder fra kalkulatormodulen. Etter det kjørte vi sumfunksjonen og leverte 2 og 5 som parametere.

I likhet med hvordan vi kalte multiplikasjonsfunksjonen, passerte vi parametrene 5 og 3 til denne modulfunksjonen. Ved hjelp av utskriftserklæringen viser vi utgangen som disse funksjonene returnerer. Kontroller koden i det festede bildet.

Kjør test_calculator.PY -modul på dette tidspunktet for å se resultatene. Selv om du kan bruke et hvilket som helst annet verktøy, skriver vi og kjører koden ved hjelp av Spyder 3 -verktøyet. Utgangen i Spyder Tool -terminalen er synlig, som du kan se. Ved hjelp av kalkulatoren.PY -klasse, funksjonens multiplikasjonsutgang er 15, og sumutgangen er 7, som er det tiltenkte resultatet.

Eksempel 02

Nå skal vi til en test for sum og multiplikasjon, men la oss anta at vi må spotte tilleggs- og multipliseringsfunksjonene. Mocking og hån er veldig nyttige når vi skriver tester for modulene våre fordi de lar oss isolere testmålene fra deres avhengigheter som forårsaker mindre skjøre tester. Hvis vi bruker hån i enhetstestene våre, vil alle tester som mislykkes gjøre det på grunn av en modifisering som er gjort i målets implementering.

Vi kan imidlertid bygge opp mockup på en måte som kan forhindre at tester svikter når de burde! La oss oppgradere vår test_calculator.PY -modulen for å legge til mockup -kode til den. Kode -øyeblikksbildet vises nedenfor:

Når den er utført, er denne enkle testen vellykket. Å spesifisere innebærer å bygge et hånlig objekt med samme API/struktur som det hånede objektet, en som vil mislykkes hvis det brukes på en måte som avviker fra spesifikasjonen. Create_autospec -funksjonen i Mock -modulen er den første av to metoder for å oppnå dette. La oss konstruere et hånlig objekt ved hjelp av den gitte funksjonens spesifikasjon. Kontroller koden i det festede bildet.

Ved å bruke et annet objekt som en spesifikasjon, opprettes et hånlig objekt ved hjelp av CREATE AUTOSPEC -funksjonen. Signaturen til alle funksjoner som blir kalt på hån blir bekreftet først. Dette er fordelaktig fordi hånfunksjonen nå er avhengig av den virkelige implementeringen, og vi vil møte et problem hvis versjonen endres og kalkulatoren ikke respekterer forsørgernes signaturer.

Når vi kjører ovennevnte kode for enhetstesten, finner vi ingen feil under utførelse. Det betyr at vi har bestått testen. Nå har vi oppdatert koden og lagt til bare noen få linjer. Vi har gitt multiplikasjonsfunksjonen til Create_autospace -funksjonen og lagret utdataene fra å multiplisere. Kontroller koden i det festede bildet.

Når vi ringer funksjonen for å multiplisere med en enkelt parameter og utføre koden da, reiser den en feil på utgangsskjermen som gitt nedenfor:

Hvis vi ikke gir noen parameter til denne funksjonen, ber den brukeren om å legge inn NUM1- og NUM2 -verdier. Kontroller koden i det festede bildet.

Her er skjermbildet for utførelsen av koden:

Når vi passerer både argumenter NUM1 og NUM2, utføres den ovennevnte testen med hell; Endringene i kodene kan sees på skjermbildet nedenfor:

Som vi tidligere diskuterte, er Create_autospec en metode for å gjøre dette, men en annen er å sette autospec = sant når du bruker patch -dekoratøren for å simulere et objekt. Vi kommer tilbake til test_calculator -modulen og oppdaterer koden som gitt nedenfor skjermbilde. De to første linjene er allerede brukt i flere tilfeller. Modulfunksjonsnavnet og verdien som er sant for AUTSPEC ble sendt til @mock.banemetode i den tredje kodelinjen.

Til høyre nedenfor har vi definert en funksjon som kalles test_multiply der vi har passert Mock Object -variabelen; Senere må vi bruke den samme variabelen for å kalle multipliseringsfunksjonen. Det er en linje i denne koden som inneholder en feil som er 6th linje fordi vi må bruke mockup -funksjonen til å fungere i stedet for direkte ved å bruke multiplikasjonsfunksjonen. Kontroller koden i det festede bildet.

Her er den oppdaterte koden. Når vi kjører denne enhetstesten, mottar vi ingen feil, noe som betyr at denne testen er bestått. Kontroller koden i det festede bildet.

Konklusjon

Dette handler om bruk av Python AutoSpec som håner i noen av våre Python -eksempler som ble utført i Spyder 3 Python -verktøyet. Alle eksemplene som brukes i denne artikkelen er enkle å gjøre og lære. Så prøv å ikke gå glipp av noen av disse for å få en bedre forståelse.