BDD met Behat

Met het BDD PHP framework Behat kun je je PHP-applicaties testen met behulp van door mensen leesbare zinnen om functies en scenario's te schrijven over hoe je applicaties zouden moeten werken om de functionaliteit ervan te testen. Vervolgens kunnen we deze tests uitvoeren om te zien of onze applicatie zich gedraagt ​​zoals verwacht. Laten we ongeveer 15 minuten besteden aan het snel doorlopen van het installatieproces van Behat en leren hoe we ons PHP-applicatiegedrag kunnen testen met behulp van de basisprincipes.


Installatie

Om te beginnen met testen met Behat, hoeven we het alleen maar op onze lokale ontwikkelingsmachine te installeren. Ik gebruik Composer, maar je kunt de documentatie bekijken voor aanvullende installatiemethoden.

Binnen je PHP-applicatie (ik heb een lege PHP-app met de naam phpbehat van tevoren gemaakt) maak een composer.json bestand met de volgende code om in Behat te laden:

"require": "behat / behat": "2.4.*@stable", "minimum-stability": "dev", "config": "bin-dir": "bin /"

In uw terminal kunnen we het installeren met behulp van de volgende opdracht:

update van de componist

We zouden nu in staat moeten zijn om het bin / Behat opdracht om met Behat te werken.


Functies maken

We beginnen altijd met het maken van een nieuw voorzien zijn van. Een functie is iets dat we kunnen gebruiken om een ​​kenmerk van onze applicatie te beschrijven en deze vervolgens implementeren om de test te laten slagen.

Een functie, op zijn eenvoudigst, bestaat uit:

  • Voor mensen leesbare, platte tekst.
  • Gebruikt een .voorzien zijn van uitbreiding.
  • Bevat het voordeel, de functie en de functie van de functie zelf.
  • Kan een lijst met scenario's bevatten.

Nu kan ik je niet laten zien hoe je alle mogelijke functies voor een toepassing kunt testen, want dat zou veel te lang duren. Maar wat ik wel kan doen, is laten zien hoe je een basiskenmerk kunt schrijven en je kunt deze code aanpassen om deze voor je specifieke toepassing te laten werken..

De Phpadder-klasse testen

Om te voorkomen dat het leerproces ingewikkelder wordt, maken we een heel eenvoudige Phpadder.php bestand dat een paar methoden bevat die we kunnen gebruiken om twee getallen bij elkaar op te tellen en hun som weer te geven.

class Phpadder private $ a; privé $ b; openbare $ som; openbare functie __construct ($ a, $ b) $ this-> a = $ a; $ this-> b = $ b;  public function add () $ this-> sum = $ this-> a + $ this-> b;  openbare functie display () return $ this-> sum; 

Hiermee wordt een nieuwe klasse met de naam gemaakt Phpadder. We hebben een paar eigenschappen om de eerste te houden ($ a) en ten tweede ($ b) nummers die moeten worden toegevoegd, evenals een $ sum eigenschap om de som van de waarden vast te houden.

Vervolgens hebben we onze constructor die onze eigenschappen initialiseert. Dan hebben we een toevoegen methode om de twee nummers bij elkaar te voegen en ten slotte een tonen methode om de som van de twee getallen weer te geven.

Adder Feature

Laten we dit nu testen Phpadder klasse. Maak een nieuw .voorzien zijn van bestand samen met de volgende code:

# features / phpadder.feature Feature: adder Om de som van twee getallen weer te geven Zoals iedereen moet ik twee getallen opgeven

We beginnen met het geven van een naam aan onze functie adder. Vervolgens specificeren we op drie regels het voordeel, de rol en ten slotte de functie zelf. Het moet redelijk zelfverklarend zijn.

Nu we onze functie hebben, beginnen we met het schrijven van onze scenario's.


Scenario's maken

Telkens wanneer we een functie maken, kunnen we scenario's definiëren die beschrijven hoe die functie zich onder bepaalde omstandigheden gedraagt. Scenario's volgen dezelfde basislay-out die bestaat uit de beschrijving van het scenario, een context, een gebeurtenis en een uitkomst.

Laten we een scenario maken om onze te testen Phpadder toepassing:

Scenario: geef de som van twee opgegeven getallen weer Gegeven heb ik het getal 50 en het getal 25 Wanneer ik ze samen voeg, zou ik er 75 moeten krijgen

We beginnen met onze scenariobeschrijving, we geven vervolgens aan dat we beginnen met de twee nummers van 50 en 25 en wanneer ze bij elkaar worden opgeteld, moet de som van 75 worden weergegeven.

U kunt ook meerdere contexten, evenementen en resultaten gebruiken met behulp van de volgende sleutelwoorden: En en Maar. Hier is een aangepast voorbeeld van het vorige scenario waarin we zullen gebruiken En:

Scenario: geef de som van twee verstrekte getallen weer Gegeven heb ik het getal 50 en het getal 25 En ik heb een derde aantal van 25 Wanneer ik ze samen voeg, zou ik 100 moeten krijgen

Stepdefinities maken

Een stap is niets meer dan een PHP-functie die bestaat uit een trefwoord, een reguliere expressie en een callback-functie. Elke bewering in uw scenario wordt gekoppeld aan een stap. Deze stappen bepalen wat er moet gebeuren als een van uw uitspraken binnen een scenario wordt aangeroepen. Je slaat al je stappen op in de features / bootstrap / FeatureContext.php het dossier.

De stap "Gegeven"

In onze FeatureContext.php bestand (u moet dit mogelijk maken), we moeten een stap schrijven voor elk van onze verklaringen, waarbij de naam ervan als functienaam wordt gebruikt. We beginnen met de "Gezien ik het nummer heb" uitspraak:

# features / bootstrap / FeaturesContext.php vereisen ("Phpadder.php"); gebruik Behat \ Behat \ Context \ BehatContext, Behat \ Behat \ Exception \ PendingException; gebruik Behat \ Gherkin \ Node \ PyStringNode, Behat \ Gherkin \ Node \ TableNode; class FeatureContext breidt BehatContext uit private $ Adder; / ** * @Given / ^ Ik heb het nummer (\ d +) en het nummer (\ d +) $ / * / openbare functie iHaveTheNumberAndTheNumber ($ a, $ b) $ this-> Adder = nieuwe Phpadder ($ a, $ b); 

Eerst maken we een nieuw PHP-bestand aan, vereisen dit in onze Phpadder.php bestand (het bestand dat we testen) en gebruiken we een paar Behat-klassen met gebruik verklaringen, direct erna.

Vervolgens maken we onze FeatureContext klasse en laat het uitbreiden BehatContext klasse.

Onze klas heeft slechts één eigenschap, $ Adder, die een a zal houden Phpadder voorwerp.

Ten slotte creëren we een methode voor onze eerste stap met dezelfde naam als de verklaring. Onze stap heeft een reguliere expressie, te vinden in de opmerking van de methode. Deze reguliere expressie wordt gebruikt om de stap aan een scenariotest aan te passen. Binnen deze methode kennen we eenvoudig een nieuwe toe Phpadder bezwaar hebben tegen onze $ This-> Adder eigendom, zodat de rest van onze methoden toegang hebben tot hetzelfde Phpadder voorwerp.

Nu hebt u waarschijnlijk de @Gegeven sleutelwoord binnen de opmerking van uw functie, dit is eigenlijk een annotatie zodat de verschillende soorten stappen kunnen worden geïdentificeerd. Je kunt gebruiken @Gegeven, @Wanneer, en @Dan.

Nu hoeven we alleen de laatste twee stappen te schrijven.

De "Wanneer" Stap

/ ** * @Wanneer / ^ voeg ik ze samen $ / * / public function iAddThemTogether () $ this-> Adder-> add (); 

Deze stap gebruikt eenvoudig onze $ This-> Adder voorwerpen toevoegen methode om de twee nummers bij elkaar te voegen.

De "Dan" stap

/ ** * @Then / ^ Ik zou (\ d +) $ / * / publieke functie iShouldGet ($ sum) if ($ this-> Adder-> sum! = $ Sum) throw new Exception ("Actual sum : ". $ this-> Adder-> sum);  $ this-> Adder-> display (); 

Deze stap begint door te controleren of de werkelijke som (opgehaald met behulp van onze $ This-> Adder object en zijn som eigendom) is niet gelijk aan de verwachte som. Als dit naar waar uitkomt, betekent dit dat we Behat een mislukking moeten laten zien. Om dit te doen, gooien we gewoon een nieuwe uitzondering met de werkelijke som, zodat we kunnen vergelijken. Anders noemen we onze tonen methode.

Tijd om de tests uit te voeren.


De tests uitvoeren

Nu we onze functies, scenario's en uitgevoerde stappen hebben, laten we onze tests uitvoeren met de volgende opdracht:

bin / Behat

U zou de volgende succesboodschappen in uw terminal moeten zien:


U kunt ervoor zorgen dat uw tests correct worden uitgevoerd, door eenvoudig iets in uw te breken Phpadder.php bestand zodat het niet op dezelfde manier werkt als uw test verwacht. Bijvoorbeeld als we de veranderen toevoegen methode om in plaats daarvan aftrekken te gebruiken, zoals zo:

public function add () $ this-> sum = $ this-> a - $ this-> b; 

En dan voeren we onze tests opnieuw uit: bin / Behat. U kunt in onze terminal zien dat we nu een mislukte test hebben, omdat deze onze nummers niet langer toevoegt, maar aftrekt:



Conclusie

Tot slot kun je een klein proces van vier stappen volgen om je PHP-apps te testen met Behat:

  1. Definieer een functie
  2. Definieer een scenario
  3. Defined Step Definitions
  4. Voer de tests uit met bin / Behat

Met zo'n kleine hoeveelheid code zouden we nu een basiskennis moeten hebben van hoe we met Behat kunnen werken om onze PHP-applicaties te testen. Raadpleeg hun documentatie voor meer informatie over het werken met Behat.