• No results found

BDD DPC 2014 Tutorial

N/A
N/A
Protected

Academic year: 2021

Share "BDD DPC 2014 Tutorial"

Copied!
28
0
0

Loading.... (view fulltext now)

Full text

(1)

Behave! - BDD

DPC 2014

Tobias Schlitt (@tobySen)

2014-06-26

(2)

How a Project Typically Works

Project… 0 articles 0.00 € Awesome Shop Smartphone 1337,-- € 5 items in stock

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Comments

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.

☑ Unit Tests ☑ Selenium

No, no, no …!

Some time later…

(3)

Behavior Driven Development (BDD)

I

Executable specification

I

Combines

I

Test Driven Development

I

Business communication

I

Common language

I

Business people

I

Analysts

I

Developers

I

Testers

(4)

Outline

Behat

Mink

Conclusion

(5)

Behat

I

BDD test framework for PHP

I

Inspired by Ruby’s Cucumber

I

Work with Gherkin language framework

(6)

Gherkin

I

Domain Specific Language (DSL) framework

I

Goal: Business readable

I

Create custom DSL on Gherkin

(7)

Gherkin in Action

1 Feature: DateTime proceeds t o end o f month. 2

3 Scenario: End o f February i s reached 4 Given i t i s date ”2013−02

−01”

5 When I proceed t o t h e end o f t h e month 6 Then t h e date i s ”2013

−02−28”

(8)

Gherkin keywords

I

Given

I

Precondition

I

Test setup

I

When

I

Behavior trigger

I

Test stimulus

I

Then

I

Expected behavior

I

Describe observable result

I

And

/

But

(9)

Binding Code to Sentences

1 Feature: DateTime proceeds t o end o f month.

2

3 Scenario: End o f February i s reached 4 Given i t i s date ”2013−02−01”

5 When I proceed t o t h e end o f t h e month 6 Then t h e date i s ”2013−02−28”

1 class ExampleContext extends BehatContext

2 {

(10)

Binding Code to Sentences

1 Feature: DateTime proceeds t o end o f month.

2

3 Scenario: End o f February i s reached 4 Given i t i s date ”2013−02−01”

5 When I proceed t o t h e end o f t h e month 6 Then t h e date i s ”2013−02−28”

1 class ExampleContext extends BehatContext

2 { 3 protected $date; 4 5 /∗ ∗ 6 ∗ @Given / ˆ i t i s date ” ( [ ˆ ” ]∗) ” $ / 7 ∗/ 8 p u b l i c f u n c t i o n t h e r e I s T h e D a t e($date) 9 {

10 $ t h i s−>date = new \DateTime($date) ;

11 }

(11)

Binding Code to Sentences

1 Feature: DateTime proceeds t o end o f month.

2

3 Scenario: End o f February i s reached 4 Given i t i s date ”2013−02−01”

5 When I proceed t o t h e end o f t h e month 6 Then t h e date i s ”2013−02−28”

1 class ExampleContext extends BehatContext

2 {

3 /∗ ∗

4 ∗ @When / ˆ I proceed t o t h e end o f t h e month$ /

5 ∗/

6 p u b l i c f u n c t i o n iProceedToTheEndOfTheMonth( )

7 {

8 $ t h i s−>date−>m o d i f y(” l a s t day o f t h i s month ”) ;

9 }

(12)

Binding Code to Sentences

1 Feature: DateTime proceeds t o end o f month.

2

3 Scenario: End o f February i s reached 4 Given i t i s date ”2013−02−01”

5 When I proceed t o t h e end o f t h e month 6 Then t h e date i s ”2013−02−28”

1 class ExampleContext extends BehatContext

2 {

3 /∗ ∗

4 ∗ @Then / ˆ t h e date i s ” ( ? P<date>[ ˆ ” ]∗) ” $ /

5 ∗/

6 p u b l i c f u n c t i o n theDateIsNow($date)

7 {

8 \PHPUnit Framework Assert: :a s s e r t E q u a l s(

9 $date,

10 $ t h i s−>date−>f o r m a t(” Y−m−d ”)

11 ) ;

12 }

(13)

Using Behat

I

$ path/to/behat[.phar]

Command for Behat usage

I

$ behat --init

Initialize global test infrastructure

I

$ behat --init @SomeNiceBundle

Initialize bundle test infrastructure

I

$ behat -dl

Display known sentences

I

$ behat path/to/features

Execute feature tests in directory

I

$ behat @SomeNiceBundle

(14)

Behavior Driven Development

Model

Domain

DDD

Domain Driven Design

Ubiquitous Language

DSL

Domain Specific Language

Speci

cation

BDD

(15)

Outline

Behat

Mink

(16)

Mink

I

Web acceptance test framework

I

Abstracts browser emulations / controllers

I

Goutte

I

Zombie.js

I

Selenium / Selenium 2

I

Sahi

I

Mink extension for Behat provides sentences

(17)

Behat Mink Example

1 Feature: Browse W i k i p e d i a 2

3 Scenario: Search f r o n t page 4 Given I am on ” / ”

5 When I f i l l i n ”s e a r c h I n p u t” w i t h ”Kore” 6 And I pr es s ”s e a r c h B u t t o n”

7 Then I s h o u l d see ”Kore may r e f e r t o: ” 8

9 Scenario: F o l l o w r e d i r e c t l i n k 10 Given I am on ” / ”

11 When I f i l l i n ”s e a r c h I n p u t” w i t h ”Kore” 12 And I pr es s ”s e a r c h B u t t o n”

13 And I f o l l o w ”Kore (energy d r i n k) ”

(18)

Mink Behat-extension

I

Mink integration for Behat

I

Pre-build sentences to browse pages

I

Extensible with custom sentences

(19)

Attention!

I

This is no more BDD!

I

Too technical

I

Not bound to the model

I

Fragile for view changes

I

However

I

Useful for system tests

I

Awesome for refactoring!

(20)

BDD through the Front-End

1 /

∗ ∗

2

@Given / ˆ I am logged i n as ” ( [ ˆ ” ]

) ” $ / 3

/ 4 p u b l i c f u n c t i o n iAmLoggedInAs($user) 5

{

6 $ t h i s

>

currentUsername = $user; 7 8 r e t u r n a r r a y(

9 new Step

\

Given(’ I am on ” / ” ’) ,

10 new Step

\

When(’ I f i l l i n ” username ” w i t h ” ’ .

$user . ’ ” ’) ,

11 new Step

\

When(’ I f i l l i n ” password ” w i t h ” t e s t ” ’) , 12 new Step

\

When(’ I p re ss ” Log in ” ’) ,

13 ) ;

(21)

Outline

Behat

Mink

(22)

Unit Testing?

I

The hype is over

I

Still important for

I

Complexity

I

High impact code

(23)

Double Feedback Test Cycle

Project Owner Failing Acceptance Test Developer Failing Unit-Test Make Test Pass Refactor Make Test Pass

(24)

Test Mix Aspects

Coverage

Stability

Unit Tests Functional Tests Acceptance Tests Integration Tests

(25)

Conclusion

I

BDD makes specification executable

I

Awesome for communication

I

Awesome to abuse for front-end testing (Mink)

I

No low hanging fruit

I

Easy to fail

(26)

We are

Helping people to create high quality web applications.

(27)

Qafoo Profiler

(28)

References

Related documents

Rest 75-120 seconds between sets. After your last set, rest 3 minutes, and proceed to C. This helps to drastically increase the involvement of the gastrocnemius. Procedure: This

Using 1984 to 1996 data from the American Housing Survey, this study examines the role of rent controls in determining the variations in prices of uncontrolled rental housing

Unit Test Integration Test System Test Regression Test Functionality Test Load / Performance Test Stress Test. Compatibility Test User

Acceptance Tests in Agile Methods Acceptance Test (Failing) Change software &amp; Refactor Tests archived User Story TDD Test 1 Acceptance Test (Passing) Change software &amp;

Step 1: Workload Capture Production System File System Client Client … Client Middle Tier. • All external client requests captured in

In section 3.2 we find that despite the absence of massless U(1) gauge factors in the effective action, there are different matter curves distinguished by a discrete gauge symmetry

Religion in the Digital Age supposes that students of Religious Studies are, in fact, uniquely positioned to learn digital technologies and utilize data analysis tools, while

Veľkosť vizitky by mala odpovedať istému štandardu (podrobnejšie v ďalšej kapitole), pretoţe ľudia si väčší počet vizitiek zvyknú triediť do špeciálnych obalov na