BDD de fuera a dentro

Post on 14-May-2015

776 views 3 download

Tags:

Transcript of BDD de fuera a dentro

BDD de fuera a dentro

Luismi Cavallé

BDD de fuera a dentro

BDD de fuera a dentro

TDD?

Behaviour- Driven

Development

BDD = TDD bien hecho?

Enough is enough

Deliver stakeholder value

It’s all behaviour

Enough is enough

Deliver stakeholder value

It’s all behaviour

Enough is enough

Deliver stakeholder value

It’s all behaviour

Enough is enough

Deliver stakeholder value

It’s all behaviour

Acceptance Test-Driven Planning

Domain-Driven Design

Test-Driven Development

Acceptance Test-Driven Planning

Domain-Driven Design

Test-Driven Development

Acceptance Test-Driven Planning

Domain-Driven Design

Test-Driven Development

Acceptance Test-Driven Planning

Domain-Driven Design

Test-Driven Development

Acceptance Test-Driven Planning

Domain-Driven Design

Test-Driven Development

BDD = TDD hecho proceso

BDD de fuera a dentro

BDD de fuera a dentro

Outside-in

ObjectObjectTest

Interface

El ciclo BDD

⓿ Inception

Visión

Metas

Temas

Requerimientos

Funcionalidades

Historias

Escenarios

❶ Scenario

Listado de usuarios

Dado que hay 2 usuarios en el sistema

Cuando visito la página de usuarios

Entonces debería ver 2 usuarios

Listado de usuarios

Dado que hay 2 usuarios en el sistema

Cuando visito la página de usuarios

Entonces debería ver 2 usuarios

❷ Red acceptance

spec

scenario 'List of users' do create_user 'mary' create_user 'paul' visit users_page assert page.has_content?('mary') assert page.has_content?('paul')end

scenario 'List of users' do create_user 'mary' create_user 'paul' visit users_page assert page.has_content?('mary') assert page.has_content?('paul')end

$ rails g model User name:string

scenario 'List of users' do create_user 'mary' create_user 'paul' visit users_page assert page.has_content?('mary') assert page.has_content?('paul')end

$ rails g controller users index

scenario 'List of users' do create_user 'mary' create_user 'paul' visit users_page assert page.has_content?('mary') assert page.has_content?('paul')end

❸ Red unit spec

describe 'users/index.html.erb' do it 'renders the list of users' do render_view :users => [mock(:name => 'Joe')] assert_contains rendered, 'Joe' endend

describe 'users/index.html.erb' do it 'renders the list of users' do render_view :users => [mock(:name => 'Joe')] assert_contains rendered, 'Joe' endend

describe 'users/index.html.erb' do it 'renders the list of users' do render_view :users => [mock(:name => 'Joe')] assert_contains rendered, 'Joe' endend

❹ Green unit spec

<h2>Users</h2><ul> <%= @users.each do |user| %> <li> <%= user.name %> </li> <% end %></ul>

<h2>Users</h2><ul> <%= @users.each do |user| %> <li> <%= user.name %> </li> <% end %></ul>

<h2>Users</h2><ul> <%= @users.each do |user| %> <li> <%= user.name %> </li> <% end %></ul>

❺ Refactor

❻ Green acceptance

spec?

scenario 'List of users' do create_user 'mary' create_user 'paul' visit users_page assert page.has_content?('mary') assert page.has_content?('paul')end

❸ Red unit spec

describe UsersController do describe 'GET index' do it 'assigns the users' do User.stub(:all => users_stub) get :index assert_equal users_stub, assigns[:user] end endend

describe UsersController do describe 'GET index' do it 'assigns the users' do User.stub(:all => users_stub) get :index assert_equal users_stub, assigns[:user] end endend

describe UsersController do describe 'GET index' do it 'assigns the users' do User.stub(:all => users_stub) get :index assert_equal users_stub, assigns[:user] end endend

describe UsersController do describe 'GET index' do it 'assigns the users' do User.stub(:all => users_stub) get :index assert_equal users_stub, assigns[:user] end endend

❹ Green unit spec

class UsersController def index @users = User.all endend

class UsersController def index @users = User.all endend

❺ Refactor

❻ Green acceptance

spec?

scenario 'List of users' do create_user 'mary' create_user 'paul' visit users_page assert page.has_content?('mary') assert page.has_content?('paul')end

❼ Refactor

❶ Scenario

❷ Red acceptance spec

❸ Red unit spec

❹ Green unit spec

❺ Refactor

❻ Green acceptance spec

❼ Refactor

De fuera a dentro

El código que te gustaría

tener

Dejar que el diseño emerja

Escribir el software que

importa

Gracias!

Love-Driven Development