Testando
sua aplicação
com BDD
Behavior Driven Development
Leonn Leite
Lenon Leite Lenin Leite
Castelo de areia espectativa
Expectativa
Castelo de areia espectativa
Expectativa mínima
realidade
Realidade
Indecisão
Clientes também são
indecisos
Tudo já
nasce atrasado
Sempre há
Problema
na comunicação
No RS
No DF
Metodologia Ágil
Porque é importante usar
testes?
Sem testes Com testes
Qual seria a solução?!
•Definir os valores do negócio (backlog)
•Priorizar as coisas baseando nas necessidades
•Descrever os cenários
•Só depois, implementar
User Stories
Ubiquitous Language
gherkin
Dan
North
TDD
TDD
BDD
“Behaviour” is a more useful
word, than “test” - Dan North,
2003
Escrevendo uma
feature
Escrevendo uma
historia
Com linguagem
gherkin
Pode ser escrito à mão
O que vamos fazer?!
Como queremos?!
•Escolhemos a operação
•Adicionamos números
Ex: somar. 1,2,4,5,6…
getcomposer.org
composer require behat/behat
download behat.phar
Iniciando o projeto com behat
vendor/bin/behat --init
Executando os testes
vendor/bin/behat
Resultado dos testes
• Passed
• Failed
• Pending
• Undefined
• Skipped
Jeito fácil
vendor/bin/behat --append-snippets
Annotations
@given
@when
@then
@and
@but
E também temos:
@BeforeSuite, @AfterSuite
@BeforeFeature, @AfterFeature
@BeforeScenario, @AfterScenario
@BeforeStep, @AfterStep
E como ficou nos
testes?
Resultado dos testes
• Passed
• Failed
• Pending
• Undefined
• Skipped
Mas você não usa os assets?
Cade o TDD?
Não, mas é possivel
composer require phpunit/phpunit
E se eu quiser adicionar mais
features…
Vou ter que colocar tudo no
FeatureContext.php?
|> Daqui
|> Para cá
Configurar o
behat.yml
Seria legal se eu conseguisse
garantir que minha feature
está de acordo com o
esperado.
Backend e frontend…
"One of the most important
parts in the web is a browser.”
behat/mink
Goutte
Selenium
Selenium2
BrowserKit
Zombie
Sahi
WUnit
behat/mink
composer require
behat/mink-goutte-driver
composer require
behat/mink-extension
phprs.feature
BDD não é
bala de prata
Obrigato
Dúvidas?
https://github.com/Sylius/Sylius
Ótimo exemplo
Leonn Leite
@leonnleite
/leonnleite
+leonnleite
Github.com/leonnleite/behat-talk
Ps: nunca fui para Las Vegas

Testando sua aplicação com BDD - conf.phprs

Notas do Editor

  • #2 Para quem não conhece, esse é o Manny Wilson Ele também é frances Vou falar um pouco de BDD – Behavior Driver Developer (ingles sulafricano) 1)
  • #3 -Arquitetos -Lenin e do Lenon (depois eu te explico o porque). -Certificado zend. Além disso sou certificado scrum master pela Scrum Alliance . - Sou evangelista php e phpDF - Mais que raios é BDD?
  • #4 Mas para isso… vamos começar devagar
  • #5 Podemos aceitar isso
  • #6 Isso acontece por inumeros motivos Vamos ver alguns deles aqui… Exemplificar
  • #7 Para você pode ser facil decidir entre o Xerife Woody, aquele velho e querido brinquedo Ou o Buzz Light ear, do comando estelar um tem um chapeu maneiro, puxa a corda e fala. O outro solta laser pelo braço e voa… Para você pode ser facil, mas não para Andy.
  • #9 Não sabem o que querem E mudam toda hora os requisitos.
  • #10 TUDO É PRA ONTEM Sistemas ja nascem atrasados Quando não tem tempo, a primeira coisa que corta é o que? TESTES
  • #11 Um outro problema é o telefone sem fio MAS É SÓ ISSO?
  • #12 Um outro problema é o telefone sem fio MAS É SÓ ISSO?
  • #13 Um outro problema é o telefone sem fio MAS É SÓ ISSO?
  • #19  Equilibrio entre pouco tempo e muita mudança. Diminui interlocutores – Melhora a comunicação (telefone sem fio) XP foi um dos primeiros a incentivar testes unitários automatizados
  • #20 User story Como <a> Eu quero <b> Para que <c> Podem ser escritas a mão
  • #21 Vamos fazer um acordo? Unificar a linguagem? Vamos ubiquitous language (linguagem ubíqua) Linguagem baseada no domínio
  • #25 Dan North, criador do BDD – behavor drive developer jbehave desenvolvimento orientado a comportamento
  • #26 Tá Mas e no PHP? O que isso tem a ver? Como faremos?
  • #28 Framework de BDD para php Funciona com php 5.3+ Ele é inspirado no cucumber do ruby
  • #29 Red – Green – Refactor Escreva um teste falho Escreva um teste de sucesso Identifique pontos de melhora
  • #34 Não é mais feature É história
  • #35 Não é mais feature É história #language: pt Funcionalidade: Descrição da feature Com o objetivo de … Como … Eu preciso … Cenário: título do primeiro cenário Dado algum contexto inicial, Quando ocorre um evento, Então verifique alguns resultados. Cenário: título do segundo cenário Dado algum contexto inicial, Quando ocorre um evneto, Então verifique alguns resultados.
  • #37 O cliente mesmo pode escrever as features Pode ser escrito a mão E esse documento, já vai ser a documentação do sistema O sistema nasce documentado :) Vamos instalar o behat?
  • #44 Instalando Composer.phar require behat/behat
  • #45 Download do behat.phar
  • #46 Iniciando um projeto
  • #47 Feature
  • #48 Como se executa? Simples assim
  • #50 Resultado dos testes
  • #52 Annotations @given @when @then @and @but
  • #53 Feature
  • #54 Feature
  • #55 Feature
  • #56 Feature
  • #57 Feature
  • #58 Feature
  • #59 Feature
  • #60 Feature
  • #61 Feature
  • #62 Feature
  • #63 Feature
  • #65 E também temos: @BeforeFeature, @AfterFeature @BeforeScenario, @AfterScenario @BeforeStep, @AfterStep
  • #69 Feature
  • #70 Resultado dos testes
  • #71 Lembram das cores? Existe 2 skipped e dois pendentes
  • #75 Exemplo de transaction com @beforeFeature e @afterFeature
  • #76 adicionando o velho e querido phpunit
  • #77 se observamos, o metodo traráONomero faz um assets o segundo cenário, traz um erro proposital
  • #86 adicionando o velho e querido phpunit
  • #88 adicionando o velho e querido phpunit
  • #94 obrigado