BDD Med Behat

BDD PHP-rammeverket Behat, lar deg teste dine PHP-applikasjoner ved hjelp av menneskelige lesbare setninger for å skrive funksjoner og scenarier om hvordan dine applikasjoner skal oppføre seg for å teste funksjonaliteten. Vi kan deretter kjøre disse testene for å se om vår søknad virker som forventet. La oss bruke omtrent 15 minutter til å gå raskt over Behats installasjonsprosess og lære hvordan vi kan teste PHP-applikasjonens atferd ved hjelp av det grunnleggende.


Installasjon

For å begynne å teste med Behat, trenger vi bare å installere den på vår lokale utviklingsmaskin. Jeg bruker Composer, men du kan se på en dokumentasjon for ytterligere installasjonsmetoder.

Innenfor PHP-applikasjonen din (jeg har en tom PHP-app som heter phpbehat opprettet på forhånd) opprett en composer.json fil med følgende kode for å laste inn Behat:

"krav": "behat / behat": "2.4.*@stable", "minimumstabilitet": "dev", "config": "bin-dir": "bin /"

I din terminal kan vi installere den ved hjelp av følgende kommando:

komponistoppdatering

Vi burde nå kunne kjøre bin / behat beordre å jobbe med Behat.


Opprette funksjoner

Vi begynner alltid ved å lage en ny trekk. En funksjon er noe vi kan bruke til å beskrive en funksjon i søknaden vår og deretter implementere den for å få testen til å passere.

En funksjon, på sitt enkleste, består av:

  • Menneskelig lesbar, ren tekst.
  • Bruker a .trekk forlengelse.
  • Inneholder funksjonens fordel, rolle og selve funksjonen.
  • Kan holde en liste over scenarier.

Nå kan jeg ikke vise deg hvordan du kan teste alle mulige funksjoner for et program, da det ville ta altfor lang tid. Men det jeg kan gjøre er å vise deg hvordan du skal skrive om en grunnleggende funksjon, og du kan tilpasse denne koden slik at den fungerer for din spesifikke applikasjon.

Testing av Phpadder-klassen

For å unngå å komplisere læringsprosessen, la oss lage en veldig enkel Phpadder.php fil som inneholder et par metoder som vi kan bruke til å legge til to tall sammen og vise summen deres.

klasse Phpadder privat $ a; privat $ b; offentlig $ sum; offentlig funksjon __construct ($ a, $ b) $ this-> a = $ a; $ this-> b = $ b;  offentlig funksjon legg til () $ this-> sum = $ this-> a + $ this-> b;  offentlig funksjonsvisning () return $ this-> sum; 

Dette skaper en ny klasse som heter Phpadder. Vi har noen egenskaper for å holde den første ($ a) og andre ($ b) tall som skal legges til, samt a $ sum eiendom for å holde verdiene summen.

Deretter har vi vår konstruktør som initialiserer våre eiendommer. Da har vi en Legg til metode for å legge de to tallene sammen og til slutt a vise metode for å vise summen av de to tallene.

Adder Feature

La oss nå teste dette Phpadder klasse. Lage en ny .trekk filen sammen med følgende kode:

# funksjoner / phpadder.feature Feature: adder For å vise summen av to tall Som noen må jeg gi to tall

Vi starter med å gi vår funksjon et navn på huggorm. Deretter angir vi på tre linjer funksjonens fordel, rolle og til slutt selve funksjonen. Det skal være ganske selvforklarende.

Nå som vi har vår funksjon, la oss begynne å skrive scenariene våre.


Opprette scenarier

Når vi lager en funksjon, kan vi definere scenarier som beskriver hvordan denne funksjonen oppfører seg under visse forhold. Scenarioer følger samme grunnleggende layout som består av scenarioets beskrivelse, en kontekst, en hendelse og et utfall.

La oss lage et scenario for å teste ut våre Phpadder applikasjon:

Scenario: Vis summen av to oppgitte tall. Gitt jeg har nummer 50 og nummer 25 Når jeg legger dem sammen Da skal jeg få 75

Vi begynner med scenariobeskrivelsen, vi forteller da at vi starter med de to tallene 50 og 25 og når de legges sammen, skal det vise summen av 75.

Du kan også ha flere sammenhenger, hendelser og resultater også ved å bruke følgende nøkkelord: Og og Men. Her er et modifisert eksempel på det forrige scenariet der vi skal bruke Og:

Scenario: Vis summen av to oppgitte tall Gitt jeg har nummer 50 og nummer 25 Og jeg har et tredje nummer på 25 Når jeg legger dem sammen Da skal jeg få 100

Opprette trinndefinisjoner

Et trinn er ikke mer enn en PHP-funksjon som består av et søkeord, et vanlig uttrykk og en tilbakeringingsfunksjon. Hver setning i scenariet ditt vil bli matchet til et trinn. Disse trinnene definerer hva som skal skje gitt at et av dine uttalelser kalles i et scenario. Du lagrer alle trinnene dine i funksjoner / bootstrap / FeatureContext.php fil.

Det "gitte" trinnet

I vår FeatureContext.php fil (du må kanskje opprette dette), vi må skrive et trinn for hvert av våre uttalelser, ved å bruke navnet som funksjonsnavn. Vi starter med "Gitt jeg har nummeret" uttalelse:

# features / bootstrap / FeaturesContext.php krever ("Phpadder.php"); bruk Behat \ Behat \ Context \ BehatContext, Behat \ Behat \ Exception \ PendingException; bruk Behat \ Gherkin \ Node \ PyStringNode, Behat \ Gherkin \ Node \ TableNode; klasse FeatureContext utvider BehatContext private $ Adder; / ** * @Given / ^ Jeg har tallet (\ d +) og tallet (\ d +) $ / * / offentlige funksjonen iHaveTheNumberAndTheNumber ($ a, $ b) $ this-> Adder = ny Phpadder ($ a, $ b); 

Først oppretter vi en ny PHP-fil, krever i vår Phpadder.php fil (filen vi tester), og så bruker vi noen få klasser med bruk uttalelser, rett etter.

Deretter lager vi vår FeatureContext klasse og få det til å forlenge BehatContext klasse.

Vår klasse har bare en eiendom, $ Adder, som vil holde en Phpadder gjenstand.

Til slutt lager vi en metode for vårt første skritt med samme navn som uttalelsen. Vårt skritt har et regulært uttrykk, funnet i metodenes kommentar. Dette vanlige uttrykket brukes til å matche trinnet til en scenarieretning. Innenfor denne metoden tildeler vi bare en ny Phpadder protestere mot vår $ Dette-> Adder eiendom slik at resten av metodene våre har tilgang til det samme Phpadder gjenstand.

Nå har du sikkert lagt merke til @Given Søkeord innenfor funksjonens kommentar, dette er faktisk en merknad, slik at ulike typer trinn kan identifiseres. Du kan bruke @Given, @Når, og @Deretter.

Nå må vi bare skrive de to siste trinnene.

"Når" -trinnet

/ ** * @Når / ^ legger jeg sammen dem $ / * / offentlig funksjon iAddThemTogether () $ this-> Adder-> add (); 

Dette trinnet bruker bare vår $ Dette-> Adder objektets Legg til metode for å legge de to tallene sammen.

"Da" -trinnet

/ ** * @Then / ^ Jeg burde få (\ d +) $ / * / offentlig funksjon iShouldGet ($ sum) if ($ this-> Adder-> sum! = $ Sum) kaste ny unntak : ". $ this-> Adder-> sum);  $ this-> Adder-> display (); 

Dette trinnet starter ved å sjekke om den faktiske summen (hentet ved hjelp av vår $ Dette-> Adder objekt og dets sum eiendom) er ikke lik forventet sum. Hvis dette vurderes til sant betyr det at vi må ha Behat vise en feil. For å gjøre det, vil vi bare kaste et nytt unntak som viser den faktiske summen, slik at vi kan sammenligne. Ellers kaller vi vår vise metode.

Tid til å kjøre testene.


Kjører testene

Nå som vi har våre funksjoner, scenarier og trinn lagt ut, la oss kjøre testene våre ved å bruke følgende kommando:

bin / behat

Du bør se følgende suksessmeldinger inne i terminalen din:


Du kan forsikre deg om at testene dine kjører riktig, ved å bare bryte noe i din Phpadder.php filen slik at den ikke løper på samme måte som testen forventer det. For eksempel, hvis vi endrer Legg til metode for å bruke subtraksjon i stedet, slik som:

offentlig funksjon legg til () $ this-> sum = $ this-> a - $ this-> b; 

Og så gjenoppretter vi testene våre: bin / behat. Du kan se i vår terminal, vi har nå en sviktende test, fordi den ikke lenger legger til tallene våre, men trekker dem ut:



Konklusjon

Som konklusjon kan du følge en liten fire trinns prosess for å teste PHP-applikasjonene dine ved hjelp av Behat:

  1. Definer en funksjon
  2. Definer et scenario
  3. Definer trinndefinisjoner
  4. Kjør testene med bin / behat

Så, med bare den lille mengden kode, bør vi nå ha en grunnleggende forståelse av hvordan vi skal jobbe med Behat for å teste våre PHP-applikasjoner. For mer informasjon om å jobbe med Behat, vennligst sjekk deres dokumentasjon.