39
BDD & JBehave Robert Kaszubowski

J behave presentation

Embed Size (px)

Citation preview

Page 1: J behave presentation

BDD & JBehave

Robert Kaszubowski

Page 2: J behave presentation

Agenda

● Czym jest BDD

● Czym jest JBehave

● Praca z JBehave

● Podsumowanie

Page 3: J behave presentation

Agenda

● Czym jest BDD

● Czym jest JBehave

● Praca z JBehave

● Podsumowanie

Page 4: J behave presentation

Zaczerpnięte z http://www.slideshare.net/wakaleo/bdd-in-action-principles-practices-and-realworld-application

Page 5: J behave presentation

Zaczerpnięte z http://www.slideshare.net/wakaleo/bdd-in-action-principles-practices-and-realworld-application

Page 6: J behave presentation

BDD

● Behaviour Driven Development

● Dan North

● Zwinne metodyki

● TDD + DDD = BDD

● Tworzenie oprogramowania przez opisywanie jego zachowania, z perspektywy jego udziałowców.

Page 7: J behave presentation

BDD kładzie nacisk na:

● Zrozumienie potrzeb klienta

● Poznanie jego języka

● Poznanie sposobu, w jaki opisuje jak oprogramowanie ma się zachowywać

Page 8: J behave presentation

3 zasady BDD

I. Enough is enough

● Analiza i projektowanie tyle ile naprawdę trzeba

● Nie specyfikujemy od razy całego zakresu projektu

● Robimy tyle ile trzeba

„Nadgorliwość gorsza jest od faszyzmu” :)

Page 9: J behave presentation

3 zasady BDD

II. Deliver stakeholder value

● Wszystko co robimy ma nieść za sobą realną wartość biznesową

● Jeśli robimy coś co tej wartości nie przynosi, warto zająć się czymś innym

● Jeżeli funkcjonalność pojawia się w projekcie, to znaczy, że jest ona wartościowa

Page 10: J behave presentation

3 zasady BDD

III. It's all behaviour

● Potrzeba mówienia „wszechobecnym językiem”

● Wszyscy uczestnicy projektu powinni odwoływać się i myśleć o systemie w ten sam sposób

● Dzięki temu zmniejszana jest bariera komunikacyjna między „nietechnicznymi” klientami, a „technicznymi” programistami

● Wymagania definiujemy w formie historyjek użytkownika

Page 11: J behave presentation

Podsumowując

● liczy się przede wszystkim zachowanie

● minimalizacja formalizmów, maksymalizacja zrozumienia

● naturalny język zrozumiały dla każdego

● nazwy metod testowych powinny być zdaniami

● łatwiejsze czytanie kodu i interpretacja testów

● kod stanowi dokumentację

Page 12: J behave presentation

Historyjki użytkownika

● Historyjka jest spisanym wymaganiem klienta

Każda historyjka składa się z kilku części:

● tytułu,

● narracji,

● kryteriów akceptacji

Page 13: J behave presentation

W narracji powinniśmy zawrzeć:

● Opis funkcjonalności

● Korzyści jakie płyną z danej funkcjonalności

● Osobę (rolę), która będzie czerpać te korzyści

Przykład:

Zakładanie nowego konta użytkownika w systemie xxx.

Jako użytkownik.

Chcę założyć nowe konto w systemie xxx.

Aby móc korzystać z systemu.

Page 14: J behave presentation

Historyjki ciąg dalszy

● Kryteria akceptacji określają moment, w którym historyjka jest kompletna. Spisywane są w postaci scenariuszy, których pozytywne przejście gwarantuje osiągnięcie celu.

Zwykle scenariusze składają się z trzech bloków:

● Given – określający kontekst

● When – określający zdarzenie

● Then – określający rezultat

Page 15: J behave presentation

Przykład historyjki (BDD)

Scenariusz: Wypłata środków z konta. (Tytuł)

Zakładając, że na koncie jest odpowiednia ilość środków (Given)

Oraz, że karta jest poprawna (Given)

Oraz, że w kasecie są pieniądze (Given)

Jeżeli klient zażąda wypłaty gotówki (When)

Wtedy konto zostanie obciążone (Then)

Oraz pieniądze zostaną wypłacone (Then)

Oraz karta zostanie zwrócona klientowi (Then)

Page 16: J behave presentation

Kluczowa sprawa

● Kluczem do sukcesu jest spowodowanie, by kryteria akceptacji poszczególnych historyjek były wykonywalne, dzięki temu da się je zautomatyzować.

Page 17: J behave presentation

Agenda

● Czym jest BDD

● Czym jest JBehave

● Praca z JBehave

● Podsumowanie

Page 18: J behave presentation

JBehave

Wykorzystuje słowa kluczowe:

● SCENARIO

● GIVEN

● WHEN

● THEN

● AND

● NARRATIVE

● EXAMPLES

Oraz annotacje:

● @GIVEN

● @WHEN

● @THEN

● @ALIAS

● @ALLIASES

● @PENDING

● Framework dla BDD wykorzystujący podobny format jak ten opisujący historyjki użytkownika.

Page 19: J behave presentation

Bez BDD

public void login(String username,String password) {driver.get("http://www.dummy.website.com");driver.findElement(By.name("username")).sendKeys(username);driver.findElement(By.name("password")).sendKeys(password);driver.findElement(By.name("update")).click();

}

@Testpublic void testLoginWorksForCorrectCredentials() {

login("bob","password");assertTrue(driver.getPageSource().contains("Welcome"));

}

@Testpublic void testLoginFailsForWrongPassword() {

login("bob","messerschmidt");assertFalse(driver.getPageSource().contains("Welcome"));

}

Page 20: J behave presentation

Agenda

● Czym jest BDD

● Czym jest JBehave

● Praca z JBehave

● Podsumowanie

Page 21: J behave presentation

1. Napisz historyjki

Scenario: Test the login works with valid credentials

Given the login pageWhen the user logs in with username: bob and password: passwordThen the word: Welcome should be on the page

Scenario: Test login fails with wrong password

Given the login pageWhen the user logs in with username: bob and password: blahThen the word: Invalid should be on the page

Page 22: J behave presentation

2. Zmapuj historyjki do Javy

@Given("the login page")public void gotoLoginPage() {

driver.get("http://www.dummy.website.com");}

@When("the user logs in with username: $username and password: $password")public void login(String username, String password) {

driver.findElement(By.name("username")).sendKeys(username);driver.findElement(By.name("password")).sendKeys(password);driver.findElement(By.name("update")).click();

}

@Then("the word: $matchWord should be on the page")public void findWordInPage(@Named("matchWord") String matchWord){

assertThat(driver.getPageSource(),containsString(matchWord));}

Page 23: J behave presentation

Data Tables i DDT

Scenario: Test login with valid and invalid data

Given the login pageWhen the user logs in with <username> and <password>Then the <matchWord> should be on the page

Examples:|username |password |matchWord ||bob |password |Welcome ||bob |blah |Invalid |… … ...

Page 24: J behave presentation

3. Skonfiguruj narzędzie

● Embedder – klasa pełniąca punkt wejściowy konfiguracji JBehave

● Z Embeddera korzystają Embeddable – klasy uruchamiające historyjki

● JBehave dostarcza implementacji JUnit Runnera

● http://jbehave.org/reference/stable/developing-stories.html#configuring

Page 25: J behave presentation

4. Uruchom testy

● Można uruchamiać je jako testy Junit

● Maven, Ant

● Można uruchamiać historyjki lokalne jak i zdalne

Page 26: J behave presentation

4. Uruchom testypublic class TraderStoryRunner { @Test public void runClasspathLoadedStoriesAsJUnit() { // Embedder defines the configuration and candidate steps Embedder embedder = new TraderEmbedder(); List<String> storyPaths = ... // use StoryFinder to look up paths embedder.runStoriesAsPaths(storyPaths); } @Test public void runURLLoadedStoriesAsJUnit() { // Embedder defines the configuration and candidate steps Embedder embedder = new URLTraderEmbedder(); List<String> storyPaths = ... // use StoryFinder to look up paths embedder.runStoriesAsPaths(storyPaths); } }● TradeEmbedder / URLTradeEmbedder – definiują konfigurację używając

wczytywania z classpath i zasobu URL

Page 27: J behave presentation

4. Uruchom testy

public class YourStory extends JUnitStory/Stories {

@org.testng.annotations.Test

public void run() throws Throwable {

super.run();

}

}

Page 28: J behave presentation

5. Obejrzyj raport

Obecnie wspierane formaty raportów:

● ConsoleOutput

● IdeOnlyConsoleOutput

● TxtOutput

● HtmlOutput

● HtmlTemplateOutput

● XmlOutput

● PostStoryStatisticCollector

● DelegatingStoryReporter

● Klasa StoryReportBuilder pozwala na konfigurowanie raportowania w kilku formatach na raz: CONSOLE, TXT, HTML, HTML_TEMPLATE oraz XML.

Page 29: J behave presentation

5. Obejrzyj raport

Page 30: J behave presentation

5. Obejrzyj raport

Page 31: J behave presentation

Agenda

● Czym jest BDD

● Czym jest JBehave

● Praca z JBehave

● Podsumowanie

Page 32: J behave presentation

Inne narzędzia do BDD

Dla Javy:

● Cucumber JVM

● Concordion

● EasyB

● JDave

● Inne:

● Jasmine (JavaScript)

● Behat (PHP)

● MSpec

Page 33: J behave presentation

JBehave vs CucumberPodobne:

● Czysta Java

● Wsparcie dla Junit

● Szybkie

● Łatwe w użyciu

Wady/Zalety Cucumber:

● wspiera features

● większa możliwość konfiguracji raportów (ładny konsolowy output, dodatkowe formaty)

● nie wspiera równoległych testy w JUnit

● słaba dokumentacja

Wady/Zalety JBehave:

● bardzo dobra dokumentacja

● całkiem dobre formatowanie HTML dla raportów

● wspiera równoległe testy w JUnit

● wspiera tylko stories a nie features

Page 34: J behave presentation
Page 35: J behave presentation
Page 36: J behave presentation
Page 37: J behave presentation
Page 38: J behave presentation
Page 39: J behave presentation