Kennisbank

Behavioural driven development

Voor het testen van kleine stukjes code zoals functies gebruiken we unit tests. Voor grotere stukken code kun je gebruik maken van Behavioral Driven Development, kortweg BDD. Met behulp van deze aanpak worden tests geschreven in een taal die begrijpelijk is voor zowel ontwikkelaars als andere belanghebbenden.

Er is al veel geschreven over BDD. Zoals BDD

Als je op het web zoekt naar Delphitools naar BDD krijg je de volgende links:

  1. Dit (YouTube is Roman die deze dia’s presenteert). Deze links zijn een presentatie van zijn kader DelphiSpec. Heel basic, maar het laat zien hoe het werkt.
  2. DelphiSpec: Delphi-bibliotheek voor het uitvoeren van geautomatiseerde tests, geschreven in gewone taal
  3. dSpec: dSpec (beta status) is een BDD-raamwerk voor Delphi/Pascal, gebouwd als uitbreiding van DUnit.

DelphiSpec

Het uitvoeren van functietests met behulp van dit raamwerk is eenvoudig. Hoewel DelphiSpec niet erg goed gedocumenteerd is, heeft het een aantal demoprojecten die laten zien wat er ondersteund wordt en wat er gedaan kan worden. We hebben een Romeinse cijferomzetter geïmplementeerd. Het zip-bestand bevat zowel het framework als het demoproject.

Het toevoegen van nieuwe testen is niet moeilijk, maar gebeurt allemaal handmatig. Dat is een tekortkoming van dit kader. Verder is het zo dat het gebruik van dit framework BDD zeker voor Delphi projecten kan worden geïmplementeerd.

Demo_using_DelphiSpec

dSpec

In het begin zal dspec niet compileren. De reden hiervoor is dat het de constructeur op Self roept vanuit een instance-methode. Dit was een techniek die voor XE3 werd gebruikt, zodat men in een base-class een functie kon schrijven die kon worden aangeroepen op objecten die afgeleid zijn van die base-class om snel objecten van die afgeleide klasse te creëren.

Dit kader wordt anders gebruikt. In plaats van gebruik te maken van functiebestanden, wordt alles in code gedaan.

– Eerst gaat je klasse uit van TContext. Deze dSpec-klasse strekt zich uit van TTestCase (onderdeel van DUnit).

– Deze TContext heeft een eigenschap genaamd Specify. Dit object heeft een aantal overbelaste functies die een ISpecifier-implementatie teruggeven die een Should-methode heeft.

– Met behulp van dit raamwerk kun je je uitspraken op deze manier schrijven:

Specify.That(FFloat).Should.Be.GreaterThan(1).And_.Be.LessThan(2);

In dit geval werd de FFloat ingevuld in een setup-methode. Alle andere methoden maken deel uit van het raamwerk.

Romeinse cijferomzetter

Het opnemen van het DelphiSpec-raamwerk in het project ondersteunt een beperkte set van de Gherkin-taal. Het bevat hiervoor een eigen parser.

Ondersteuning

De ondersteuning hiervoor is omslachtig in Delphi. Het DelphiSpec raamwerk dat in 2015 is geschreven lijkt het beste wat we hebben en het ondersteunt geen ontleding van de functiebestanden naar pas-bestanden voor verdere implementatie. Het is allemaal handwerk. Natuurlijk is het mogelijk om hiervoor een parser te implementeren, maar aangezien het werk aan het DelphiSpec framework lijkt te zijn gestopt, moeten daar ook nieuwe functies worden toegevoegd om volledig up-to-date te zijn.

FeatureParser

Geschreven door Johnny Nap
Delphi ontwikkelaar

Contact

Laat ons helpen jouw ambities concreet te maken.