bdd @tommykaczmarek

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

Upload: tommykaczmarek

Post on 09-Aug-2015

74 views

Category:

Presentations & Public Speaking


0 download

TRANSCRIPT

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

@tommykaczmarek

@SCENARIO@Given

@When

@Then

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 |

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);

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 |

KOMUNIKACJA

DYSKUSJA

PRZEJRZYSTOŚĆ

SPISYWANIESCENARIUSZY

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

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

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

Jak będę mierzyć efektywność?

“Przecież to prawie jak mamy u siebie”

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

SPECYFIKACJE SĄSPISYWANE

“To taki inny sposób na skrypty testowe”

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

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 |

NAZYWAJ SYTUACJEDOSŁOWNIE

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.

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

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

baze początkowych kroków dlascenariuszy.”

“Współdzielenie kodu!”

DOBRE INTENCJE.NIEKONTROLOWANE KOPIOWANIE.

OBSZERNE KROKI USTAWIAJĄCESYSTEM

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

produkcje.”

CZY KTOŚ BĘDZIECZYTAĆ

SPECYFIKACJE?...PO NAPISANIU

NIECZYTANE = NIECZYTELNEBARDZO SZYBKO..

KTO BĘDZIE ODBIORCĄSPECYFIKACJI?

DEVELOPERZY LEPIEJZROZUMIEJĄ TESTY

“Na unit testy nie ma czasu bo mamyJBehave.”

TESTY ZNASTAWIENIEM NA

ZACHOWANIE

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"

KOMUNIKACJASPISYWANIE SPECYFIKACJI

CZYTANIE SPECYFIKACJISPECYFIKACJA VS TESTY

PYTANIA?