Top Banner
BDD BRZMI PIĘKNIE. TYLKO DLACZEGO CZĘSTO SIE NIE UDAJE? @tommykaczmarek
39

Bdd @tommykaczmarek

Aug 09, 2015

Download

tommykaczmarek
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Bdd @tommykaczmarek

BDD BRZMI PIĘKNIE.TYLKO DLACZEGO CZĘSTO SIE NIE UDAJE?

@tommykaczmarek

Page 2: Bdd @tommykaczmarek

@SCENARIO@Given

@When

@Then

Page 3: Bdd @tommykaczmarek

Scenario Aktywacja kartyGiven Użytkownik ma nieaktywną karteWhen Użytkownik aktywuje karte podając $pinThen Aktywacja ma status $status i zostanie wyświelony komunikat $komunikat

Examples:| pin | status | komunikat || 2244 | OK | Ustawienie kodu PIN przebiegło pomyślnie || 22a2 | FAIL | Dozwolone tylko liczby || 62628812 | FAIL | Długość kodu PIN powinna wynosić 4 znaki |

Page 4: Bdd @tommykaczmarek

public class CardActivationSteps

private BankCardApi bankCardApi; private BankCard bankCard;

public CardActivationSteps(BankCardApi bankCardApi) this.bankCardApi = bankCardApi;

@Given("Użytkownik ma nieaktywną karte") public void cardIsInactive() bankCard = bankCardApi.prepareNewCard();

@When("Użytkownik aktywuje karte podając $pin") public void cardIsUsedForAFirstTime(@Named("pin") String pin) bankCardApi.activate(bankCard, pin);

@Then("Aktywacja ma status $status i zostanie wyświelony komunikat $komunikat") public void pinGenerationRequest(@Named("status") String status, @Named("komunikat") String komunikat) ActivationResult activationResult = bankCardApi.activationStatus(bankCard); assertThat(activationResult.getStatus().name()).isEqualTo(status); assertThat(activationResult.getError()).isEqualTo(komunikat);

Page 5: Bdd @tommykaczmarek
Page 6: Bdd @tommykaczmarek
Page 7: Bdd @tommykaczmarek

Scenario Użytkownik zakłada konto w serwisieGiven Użytkownik zakłada kontoWhen Użytkownik poda imie $imie oraz nazwisko $nazwiskoThen Operacja ma status $status i zostanie wyświetlony komunikat $komunikatAnd Zostanie wyświetlony błąd : Nieprawidłowo wypełniony formularz

Examples:| imie | nazwisko | status | komunikat || Tomasz | Kaczmarek# | FAIL | Formularz zawiera błędy |

Page 8: Bdd @tommykaczmarek
Page 9: Bdd @tommykaczmarek

KOMUNIKACJA

Page 10: Bdd @tommykaczmarek

DYSKUSJA

Page 11: Bdd @tommykaczmarek

PRZEJRZYSTOŚĆ

Page 12: Bdd @tommykaczmarek

SPISYWANIESCENARIUSZY

Page 13: Bdd @tommykaczmarek

A WIĘC CHCESZ UŻYĆ W PROJEKCIEBDD...

Page 14: Bdd @tommykaczmarek

“Mamy scruma ale nie robimy standupówbo nie mamy problemów z komunikacją”

Page 15: Bdd @tommykaczmarek
Page 16: Bdd @tommykaczmarek

DLACZEGO CHCĘ UŻYWAĆ NOWEGONARZĘDZIACo chcę osiągnąć?

Jak będę mierzyć efektywność?

Page 17: Bdd @tommykaczmarek

“Przecież to prawie jak mamy u siebie”

“Analityk będzie pisać scenariusze wformule Given/When/Then”

Page 18: Bdd @tommykaczmarek
Page 19: Bdd @tommykaczmarek

SPECYFIKACJE SĄSPISYWANE

Page 20: Bdd @tommykaczmarek

“To taki inny sposób na skrypty testowe”

Page 21: Bdd @tommykaczmarek

Scenario ­ Zmiana miasta w profilu użytkownikaGiven Użytkownik zaloguje się do serwisu jako zenon And Wprowadzi hasło zenon1And Kliknie na zakładke UstawieniaAnd Przejdzie do ZaawansowaneAnd Przejdzie do sekcji profilWhen Naciśnie przycisk edytuj profilThen Zostanie przekierowany do strony edycji profiluWhen Wprowadzi miasto zamieszkaniaAnd Naciśnie zapiszThen Profil zostanie zapisanyAnd Wyświetli sie informacja: Profil zapisany

Page 22: Bdd @tommykaczmarek
Page 23: Bdd @tommykaczmarek

WARUNKI BRZEGOWE

Scenario Użytkownik zakłada konto w serwisieGiven Użytkownik zakłada kontoWhen Użytkownik poda imie $imie oraz nazwisko $nazwiskoThen Operacja ma status $status i zostanie wyświetlony komunikat $komunikatAnd Zostanie wyświetlony błąd : Nieprawidłowo wypełniony formularz

Examples:| imie | nazwisko | status | komunikat || Tomasz | Kaczmarek# | FAIL | Formularz zawiera błędy || Tomasz@ | Kaczmarek | FAIL | Formularz zawiera błędy || Tomasz | Kaczmarek11 | FAIL | Formularz zawiera błędy || Tomasz23 | Kaczmarek | FAIL | Formularz zawiera błędy || Tomasz | Kaczmarek_ | FAIL | Formularz zawiera błędy || Tomasz | Kaczmarek | FAIL | Formularz zawiera błędy || Tomasz | Kaczmarek% | FAIL | Formularz zawiera błędy || Tomasz | (Kaczmarek) | FAIL | Formularz zawiera błędy |

Page 24: Bdd @tommykaczmarek

NAZYWAJ SYTUACJEDOSŁOWNIE

Page 25: Bdd @tommykaczmarek

Given Gateway nie otrzyma ramki RFVS przez 30 sekundAnd Gateway nie może wysłać ramki H3DE do mediatoraWhen Użytkownik wykona akcje ROZPOZNAJThen Na ekranie wyświetli sie: System nie działa, sprobuj później.

Page 26: Bdd @tommykaczmarek

Given Mediator jest rozłączonyWhen Użytkownik wykona akcje ROZPOZNAJThen Na ekranie wyświetli sie: System nie działa, sprobuj później.

Page 27: Bdd @tommykaczmarek

“Ten scenariusz jest bardzo podobny dopoprzedniego. Utworzymy sobie wspólną

baze początkowych kroków dlascenariuszy.”

“Współdzielenie kodu!”

Page 28: Bdd @tommykaczmarek

DOBRE INTENCJE.NIEKONTROLOWANE KOPIOWANIE.

Page 29: Bdd @tommykaczmarek

OBSZERNE KROKI USTAWIAJĄCESYSTEM

Page 30: Bdd @tommykaczmarek

“Scenariusze będą uaktualniane wnastępnym sprincie po wdrożeniu na

produkcje.”

Page 31: Bdd @tommykaczmarek

CZY KTOŚ BĘDZIECZYTAĆ

SPECYFIKACJE?...PO NAPISANIU

Page 32: Bdd @tommykaczmarek

NIECZYTANE = NIECZYTELNEBARDZO SZYBKO..

Page 33: Bdd @tommykaczmarek

KTO BĘDZIE ODBIORCĄSPECYFIKACJI?

Page 34: Bdd @tommykaczmarek

DEVELOPERZY LEPIEJZROZUMIEJĄ TESTY

Page 35: Bdd @tommykaczmarek

“Na unit testy nie ma czasu bo mamyJBehave.”

Page 36: Bdd @tommykaczmarek

TESTY ZNASTAWIENIEM NA

ZACHOWANIE

Page 37: Bdd @tommykaczmarek

def "should activate inactive banking card"() given: "Użytkownik ma nieaktywną karte" bankCard = bankCardApi.prepareNewCard();

when: "Użytkownik aktywuje karte podając pin" bankCardApi.activate(bankCard, pin);

then: "Aktywacja ma status status i zostanie wyświelony komunikat komunikat" ActivationResult activationResult = bankCardApi.activationStatus(bankCard);

activationResult.getStatus().name() == status activationResult.getError() == message

where: pin | status | message "2244" | "OK" | "Ustawienie kodu PIN przebiegło pomyślnie" "22a2" | "FAIL" | "Dozwolone tylko liczby" "62628812" | "FAIL" | "Długość kodu PIN powinna wynosić 4 znaki"

Page 38: Bdd @tommykaczmarek

KOMUNIKACJASPISYWANIE SPECYFIKACJI

CZYTANIE SPECYFIKACJISPECYFIKACJA VS TESTY

Page 39: Bdd @tommykaczmarek

PYTANIA?