9. Vem är det till för? Svar: Alla påverkade av någon typ av leverans!
10. Vilka verktyg finns då? Ok, om jag nu ska ta hand om något må det f#@n va smidigt!
11. Tillgängliga verktyg Cucumber Härstammar ifrån Beteende Driven Design Given/When/Then syntax Kriterier definieras i klarspråk FIT Uppfunnet av wiki-mannenWardCummingham Tabellformat Kriterier definieras i form av tabeller Twist Thoughtworks nya tool, mestadels för web-ui testning Engelska-liknande konstruktioner Kriterier definieras med hjälp av fördefinierade ord Hemmabyggen Uppfinns och skapas för det behovet man har Ofta i något domänspecifikt språk
12. Härstammar ifrån BDD Har egenskaper (features) -> stories Har scenarion -> acceptanssteg Scenarion skrivs på formen: Givet <något tillstånd> När <något sker> Så <försäkra att>
13. Språket Cucumber förstår heter Gherkin Cucumber förstår i skrivande stund 37 olika språk Ett test kan se ut såhär: Feature: Search courses In order to ensure better utilization of courses Potential students should be able to search for courses Scenario: Search by topic Given there are 240 courses which do not have the topic "biology" And there are 2 courses A001, B205 that each have "biology" as one of the topics When I search for "biology" Then I should see the following courses: | Course code | | A001 | | B205 |
14. Ett dag i en egenskaps livscykel Det var en gång för länge sedan…
16. Egenskapen kommer med i planeringen och en utvecklare… … ”laddar” ner den ifrån pivotaltracker med hjälp av tpope’spickler. Ett tool för att managera saker i pivotaltracker.
21. En liten summering… Pickler- Ett tool för att managerastories i PivotalTracker Stories skrivna med som features, med Given/When/Then Pickler– Används för att leverera en feature som blivit godkänd till pivotaltracker! Tolkar stories skriva i Gherkin och exekverar acceptansteg Byggservern kör alla acceptanstest vid varje integrationsbygge. Om något test inte accepteras stoppas bygget tills någon fixat det!
22. Hur gör jag då? Ok, om jag nu ska skriva de här egenskaperna, så måste jag ju veta vad jag har att ”jobba” med!
23. Egenskap (Feature) Börja med att beskriva önskat värde! Ett bra sätt att skriva egenskaper är: In order to <gainsomevalue> As <who am I?> I want<something> / (So that <stakeholder X is satisfied>) Då får man det viktigaste först… värdet! Därefter vad man eftertraktar Samt för vem detta är eftertraktat
24. Övning: Egenskap Ta 5min med personen till vänsterom dig ochförsökskriva1avdessapåformen In order to…/As … / I want … (/ So that …) CPX: Implement Regions in Australia CAT: Avoid oversampling
25. Scenarion Beskrivs av Given/When/Then Given <a context> When <an event happens> Then <an outcomeoccurs> Andra ord som kan vara användabara är: And & But, ger läsbarhet istället för att repetera något av stegen.
26. And & But Scenario: Multiple Givens Given one thing Given an other thing Given yet an other thing When I open my eyes Then I see something Then I don't see something else Scenario: Multiple Givens Given one thing And an other thing And yet an other thing When I open my eyes Then I see something But I don't see something else
27. Abstrakt Scenario (Scenario Outline) Adderar exempel till stegen i form av tabeller. Fortfarande på formen Given/ When/ Then Scenario: eat 5 out of 12 Given there are 12 cucumbers When I eat 5 cucumbers Then I should have 7 cucumbers Scenario: eat 5 out of 20 Given there are 20 cucumbers When I eat 5 cucumbers Then I should have 15 cucumbers Scenario Outline: eating Given there are <start> cucumbers When I eat <eat> cucumbers Then I should have <left> cucumbers Examples: | start | eat | left | | 12 | 5 | 7 | | 20 | 5 | 15 |
28. Lite mer avancerade stegdefinitioner Exempel: Säg att jag t.ex. har 3 olika användare som jag vill exercera i min egenskap. Hur gör jag det då? Tänk om jag håller på med en blogg då och vill skapa en post med långa textsträngar …
29. Flerraders stegargument (Multi step arguments) Given the followingpeopleexist: | name | email | phone | | Aslak | aslak@email.com | 123 | | Joe | joe@email.com | 234 | | Bryan | bryan@email.org | 456 | Given /the followingpeopleexist:/ do |people_table| people_table.hashes.eachdo |hash| # The first time the +hash+ willcontain: # {'name' => 'Aslak', 'email' => 'aslak@email.com', 'phone' => '123'} # The second time: # {'name' => 'Joe', 'email' => 'joe@email.com', 'phone' => '234'} # etc. end end
30. Flerraderssträngar(Multiline strings) Given a blog post named "Random" with Markdown body """ Some Title, Eh? ============== Here is the first paragraph of my blog post. Loremipsum dolor sit amet, consecteturadipiscingelit. """ Given /^a blog post named "([^amp;quot;]*)" with Markdown body$/ do |title, markdown| Post.create!(:title => title, :body => markdown) end
31. DRY:ing up your code Ok, nu har jag en hel del steg och grejor, men det börjar se rätt grötigt ut. Vad gör jag nu?
32. Transformationer Man använder transformmetoder för att registrera ett regexp tillsammans med ett block. Transformen kommer köras innan registrerade Regexp grupper, vilket gör att Transformen körs innan själva Step-blocket # features/step_definitions/user_steps.rb Transform /^user +$/do |step_arg| User.find_by_username /(+)$/.match(step_arg)[0] end Then /^(user +) should be friends with (user +)$/do |user, friend| user.shouldbe_friends_with(friend) end
33. Transformationsstabeller Scenario: setting up via table Given ... When ... Then I should have | name | age | | corey | 36 | Transform /^table:name,age$/do |table| table.hashes.map { |hash| hash[:name] }.map { |name| Person.find_by_name(name) } end
34. Övning: Scenario Ta 5min med personensom du arbetade med ochförsökskriva2scenarionåt “er” egenskappåformen: Given /When / Then CPX: Implement Regions in Australia CAT: Avoid oversampling
35. Kommunikation via test Men om produktägaren skriver alla scenarion innan oss, och det är integrerat med bygget… betyder det att bygget kommer va rött tills vi är klara då?
36. Taggning Ett bra sätt att organisera egenskaper och scenarion En egenskap eller scenario kan ha så många taggar som ”behövligt” Du kan använda --tagsför att köra (eller låta bli att köra) saker cucumber--tags@billing cucumber--tags~@billing Du kan använda taggar för att länka in t.ex. dokument Ett annat sätt är att använda det i ditt work flow för att förmedla saker till dina kollegor, t.ex. work in progress @wip Feature: Index projects
37. Tagglogik När du ska köra t.ex. ett par scenarion kan du välja mellan att ”och:a” eller ”ellra” ihop dem genom: AND: cucumber--tags@billing, @important OR: cucumber--tags@billing--tags@important
38. Begränsa körning med taggar Om man följer Kanban så kanske man vill begränsa säg, hur många saker som görs åt gången. Då kan man använda ”--wip”-flaggan och skriva något liknande: cucumber--tags@wip:3