View
776
Download
3
Category
Tags:
Preview:
Citation preview
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
Recommended