A tesztelő rendszer RUBY KÖRNYEZETBEN
A Cucumber Aslak Hellesøy készítette az első verziót ami június 20-án jelent meg a legfrissebb verzió. Maga az eszköz a Behavior-Driven Development (BDD) elveit követi Ebben a tesztelési hozzáállásban az alapelvek: ◦Előre írjuk meg a tesztet a komponensünkhöz ◦Az elkészült tesztek után implementáljunk ◦A tesztek sorozatos futtatásával finomítsuk a kódot ◦A tesztek minden esetben megfogalmazhatóak, illetve specifikálhatóak természetes nyelven
Ruby nyelven íródott, de azon kívül is léteznek implementációk, ezekből néhány az eredetit használja és egyfajta hidat képez a célnyelv és a Cucumber között (pl. cuke4php és cuke4lua) Weboldal: A BDD-nek megfelelően a tesztek két részből állnak. A megrendelő számára átadható informális leírás Az informális leírás sorainak megfelelő valódi program
Az informális leírásra a következő megkötések érvényesek: Egy.feature kiterjesztésű fájlba kell írni őket Beépített kulcsszavakat kell használni Feature, Scenario / Scenario outline és Examples Given, And, When, Then A kulcsszavak egyébként több nyelven is megadhatók nem csak angolul: Jellemző, Forgatókönyv /Forgatókönyv vázlat és Példák Amennyiben, És, Ha, Akkor
Példa: division.feature # language: en Feature: Division In order to avoid silly mistakes Cashiers must be able to calculate a fraction Scenario: Regular numbers Given I have entered 3 into the calculator And I have entered 2 into the calculator When I press divide Then the result should be 1.5 on the screen
Példa: addition.feature # language: en Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered into the calculator And I have entered into the calculator When I press Then the result should be on the screen Examples: | input_1 | input_2 | button | output | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
Az ennek megfelelő, konkrét lépéseket végrehajtó kódot pedig a step_definitions könyvtárba kell helyezni ami a feature fájllal egy szinten van. A lépések kódjának keretét nem kell kézzel megírni azt a futtató rendszer kiírja amennyiben nem találja meg azokat. Az ebben lévő paramétereket pedig reguláris kifejezésekkel lehet kinyerni.
Példa: calculator_steps.rb # encoding: utf-8 begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; end require 'cucumber/formatter/unicode' $:.unshift(File.dirname(__FILE__) + '/../../lib') require 'calculator' Before = Calculator.new end After do end
Példa: calculator_steps.rb Given /I have entered (\d+) into the calculator/ do n.to_i end When /I press (\w+)/ do op end Then /the result should be (.*) on the screen/ do == result.to_f end
A javasolt könyvtárstruktúra a következő: features (Ide tesszük a.feature fájlokat) step_definitions(Ide tesszük a lépések definícióit) support(Az itt található forrásfájlok induláskor betöltődnek)
A tesztelés indítása alapesetben úgy történik, hogy egy terminálon belépünk a features könyvtárral egy szintre és kiadjuk a cucumber parancsot. Ekkor az összes feature fájlt feldolgozza. Ezt a működést többféleképpen is felüldefiniálhatjuk : Megadhatjuk konkrétan a feature fájl nevét a parancs után cucumber features/AwesomeFeature.feature Használhatunk Tag-eket, amelyekkel szeparálhatjuk a teszteseteinket. Például csak adott taggel megjelölt teszteseteket futtathatunk.
Példa: Tag-ek használata A tagek arra valók, hogy a teszteseteinket csoportokba szervezzük azért, hogy ne kelljen minden esetben minden tesztet Feature: Verify Scenario: Missing product description Scenario: Several products
Példa: Tag-ek használata Futtatás: cucumber (Csak taggel jelöltek) cucumber (Csak taggel jelöltek) cucumber –-tags (Minden ami nincs taggel) cucumber (Minden teszt lefut cucumber --tags (Minden teszt lefut
További lehetőségek Webes tesztelés A Cucumber a webes alkalmazások tesztelésében is használható, így tesztelhetjük vele Rails alkalmazásainkat is. Ezen felül, mivel ehhez a Cucumber más gem-eket használ ezért nem csak Rails, hanem tetszőleges webes- alkalmazások is tesztelhetőek.
További lehetőségek Hook-ok Arra valók, hogy 1-1 adott végrehajtási egység előtt illetve után lefuttathassunk kódrészeket például a teszteset környezetének inicializálása érdekében vagy a teszteset utáni takarítás miatt.
További lehetőségek Hook-ok fajtái Scenario hookok Minden Scenario/Scenario outline előtt/után fut Before do |scenario| … end After do |scenario| … end do |scenario, block| … end
További lehetőségek Hook-ok fajtái Step hook AfterStep do |scenario| … end Configuration hook AfterConfiguration do |config| … end
Kérdések Mik a Cucumber angol nyelvű kulcsszavai? Mire jók a Tag-ek? Hogyan lehet a teszt szövegéből kinyerni a paramétereket?