2. BDD – Behaviour Driven Development
• TDD - Test-driven Design
• DDD - Domain-driven Design
• Grupa deweloperów i ludzi od biznesu mają te same
narzędzia do definiowania wymagań.
3. BDD
• Grupa deweloperów i ludzi od biznesu mają te same
narzędzia do definiowania wymagań.
Czyli pisanie scenariuszy:
10. Potrzeba biznesowa - scenariusz
Scenario: Anonymous user should not be able to view
notebook list
Given I am anonymous user
When I click "Go to notebooks"
And I go to "/notebooks/"
Then I should be redirected to "/login"
11. Potrzeba biznesowa - scenariusz
Scenario: User should can update notebook
and be redirected to notebook tasks
Given I am authenticated as "Greg"
And I go to "/notebooks/"
And I follow "Edit Todo list"
And I fill in "notebook_name" with "Shopping list
edited"
And I press "Submit"
Then I should see success message "The notebook has
been updated successfully"
And should be redirected to "/notebooks/(.+)"
12. Potrzeba biznesowa – kilka scenariuszy
Background:
Given there are following users:
| username | password |
| Greg | a |
| Katie | a |
13. Gherkin - składnia
• Feature
• opis ogólny
• Tagi
• Background
• Given
• Zestaw Scenariuszy
• Given
• When
• Then
14. Zalety
• Forma czytelna dla człowieka biznesu
• Forma czytelna dla programistów
• Dokumentacja dla nowych osób w projekcie – profit!
15. Zalety
• Wszystko jest na papierze
• Scenariusze są powtarzalne
• Służą jako automatycznie wykonywane cylicznie testy
• Scenariusze są w postaci tekstowej, zatem można je
wersjonować, np. na git
16. Wady
• Narzut czasowy na produkowanie scenariuszy
• Tworzenie słownika pojęć (FeatureContext)
• Czas trwania testów
ale…
• zrównolegnienie wielowątkowe
• wykonywanie tylko pewnego podzbioru testów
• testy wykonywane asynchronicznie na serwerze CI
17. TDD i BDD w Scrum
• Można przyjąć jako kryterium akceptacji
• Może stanowić standard do każdej iteracji
• Trzeba dodatkowo szacować
18. Contineous Integration
• Automatyczne uruchamianie po każdym commicie na
serwerze Contineous Integration
• W przypadku błedu mail do wybranych osób z
powiadomieniem, kto popsuł
• Eliminacja „u mnie działa”
• Narzędzia: Jenkins/Hudson
22. Behat - FeatureContext
• Scenariusze są wykonywane w ramach kontekstów
FeatureContext
• FeatureContext to zbiór definicji Given/When/Then,
to tutaj dokonuje się interpretacja zdań na kod
23. Behat - FeatureContext
class MinkContext extends RawMinkContext implements
TranslatableContext
{
/**
* Opens specified page.
*
* @Given /^(?:|I )am on "(?P<page>[^"]+)"$/
* @When /^(?:|I )go to "(?P<page>[^"]+)"$/
*/
public function visit($page)
{
$this->visitPath($page);
}
24. Behat - FeatureContext
/**
* Clicks link with specified id|title|alt|text.
*
* @When /^(?:|I )follow
"(?P<link>(?:[^"]|")*)"$/
*/
public function clickLink($link)
{
$link = $this->fixStepArgument($link);
$this->getSession()->getPage()-
>clickLink($link);
}
25. Behat - FeatureContext
/**
* @Then /^(?:|I )should see "([^"]+)"
(heading|headline)$/
*/
public function iShouldSeeHeading($heading)
{
$this->assertSession()
->elementTextContains(
'xpath', '//h1 | //h2',
$this->fixStepArgument($heading));
}
27. Behat - Suites
• Scenariusze oraz FeatureContext w ramach których się
wykonują to suites definiowane w pliku głównym
behat.yml
Suites
Ścieżki z plikami .features
(lista)
FeatureContext’y
(lista)
28. Behat – Konfiguracja testowania
• Całkowicie poza aplikacją – klikanie po UI
• Wartość dodana: tekstowe Selenium
• Całkowicie w aplikacji
• Czyste DDD, prawie testy jednostkowe Core Domain
• Mieszane
• Największa wartość – co się dzieje w systemie, gdy klikam
po UI lub wysyłam requesty do API
29. Behat – Konfiguracja testowania
• Integracja z frameworkiem wymaga bardzo dużej
wiedzy technicznej odnośnie wykorzystywanego
narzędzia.
• Dependency Injection i Inversion of Control
• Sessions
• Repositories/Database/Serial buses