Vitor Mattos
CTO da LibreCode, empreendedor, sempre buscando novos desafios e conhecimentos. Grande incentivador do software livre, evangelista PHP, palestrante em eventos regionais e nacionais.
@VitorMattosRJ
Realizador de sonhos desde 2003
Amante de opensource
Palestrante
PHP Zend Certified Engineer ( ZEND024235 )
PHPRio ( https://telegram.me/phprio )
CTO Lyseon Tech
Redes sociais: ( VitorMattos ou VitorMattosRJ )
A Lyseon Tech é uma cooperativa de trabalho com modelo de gestão democrática, segura e eficiente composta por profissionais de T.I. altamente qualificados e experientes no mercado. Prezamos por apresentar vantagens, tanto para o cooperado como para as empresas parceiras.
Porque fazê-los se já posso começar desenvolvendo?
Edward A. Murphy
"É de conhecimento geral entre os analistas de softwares que nunca se elimina o último bug de um programa. Os bugs são aceitos como uma triste realidade. Esperamos eliminá-los todos, um por um, mas nunca conseguiremos nos livrar deles."
Tom DeMarco
"Depois eu escrevo o plano de testes..."
"Vamos deixar os testes para a próxima fase..."
"Na minha máquina funcionou..."
"Temos que entregar o produto na semana que vem..."
<?php
use PHPUnit\Framework\TestCase;
classs CalculatorTest extends TestCase
{
private $calculator;
protected function setUp()
{
require_once 'calculator.php';
$this->calculator = new Calculator
}
}
Como testar se não existe código escrito?
© 2003, Dan North
Tá bom…. BDD pode me ajudar
mas...
“BDD is a second-generation, outside–in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology.
It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters.”
Testes automatizados
“A preguiça é a mãe do progresso. Se o homem não tivesse preguiça de caminhar, não teria inventado a roda”
Mário Quintana
Martin Luther King
דרישות
Tələblər
المتطلبات
skenario
需求
потребностей
Programadores conversam usando jargões técnicos
( design patterns, abreviações, termos técnicos )
Especialistas do Domínio usam terminologias específicas de suas áreas de conhecimento
(economia, hotelaria, telecom, …)
Softwares são escritos em diversas linguagens
Agile prega que programadores devem usar a linguagem de domínio como nomenclaturas no código fonte
(“ubiquitous language”,
“system metaphor” na XP)
A language structured around the domain model and used by all team members to connect all the activities of the team with the software.
(Excerpted from Domain-Driven Design by Eric Evans).
We understand each other.
(Excerpted from The Art of Agile Development
by James Shore and Shane Warden,published by O'Reilly.
© 2008 the authors.)
Chris Matts & Dan North
Feature: Feature description
In order to
As a …
I need …
Feature: Feature description
In order to
As a …
I need …
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature: Feature description
In order to
As a …
I need …
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature: Feature description
In order to
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature
Funcionalidade
Feature: Feature description
In order to
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario
Cenário
Feature
Funcionalidade
Feature: Feature description
In order to
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Step
Passo
Scenario
Cenário
Feature
Funcionalidade
Feature: Feature description
In order to
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature: Feature description
In order to
As a …
I need …
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature: Feature description
In order to
As a …
I need …
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
#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.
#language: ja
フィーチャ: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
シナリオ: título do primeiro cenário
前提< algum contexto inicial,
もし< ocorre um evento,
ならば< verifique alguns resultados.
シナリオ: título do segundo cenário
前提< algum contexto inicial,
もし< ocorre um evneto,
ならば< verifique alguns resultados.
#language: fr
Fonctionnalité: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
Scénario: título do primeiro cenário
Étant donnée algum contexto inicial,
Lorsque ocorre um evento,
Alors verifique alguns resultados.
Scénario: título do segundo cenário
Étant donnée algum contexto inicial,
Lorsque ocorre um evneto,
Alors verifique alguns resultados.
#language: el
Δυνατότητα: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
Σενάριο: título do primeiro cenário
Δεδομένου algum contexto inicial,
Όταν ocorre um evento,
Τότε verifique alguns resultados.
Σενάριο: título do segundo cenário
Δεδομένου algum contexto inicial,
Όταν ocorre um evneto,
Τότε verifique alguns resultados.
mas...
Socorro! Ele já está falando
coisas que não entendo
novamente!
getcomposer.org
Baixe o instalador do composer
N º instalações
desde v2.2
(2011-12-14)
Executando o composer
e instalando o behat
Feature: ls
In order to see the directory structure
As a UNIX user
I need to be able to list the current directory's contents
Scenario:
Given I am in a directory "test"
And I have a file named "foo"
And I have a file named "bar"
When I run "ls"
Then I should get:
"""
bar
foo
"""
Arquivo: features/ls.feature
/**
* Opens specified page
* Example: Given I am on "http://batman.com"
* Example: And I am on "/articles/isBatmanBruceWayne"
* Example: When I go to "/articles/isBatmanBruceWayne"
*
* @Given /^(?:|I )am on "(?P<page>[^"]+)"$/
* @When /^(?:|I )go to "(?P<page>[^"]+)"$/
*/
public function visit($page)
{
$this->visitPath($page);
}
Profile
suite #1
.feature #1
.feature #2
classe de contexto
suite #1
.feature #1
.feature #2
classe de contexto
# behat.yml
default:
suites:
core_features:
paths: [ %paths.base%/features/core ]
contexts: [ CoreDomainContext ]
user_features:
paths: [ %paths.base%/features/web ]
filters: { tags: @user }
contexts: [ UserContext ]
admin_features:
paths: [ %paths.base%/features/web ]
filters: { tags: @admin }
contexts: [ AdminContext ]
# behat.yml
default:
suites:
core_features:
paths: [%paths.base%/features/core ]
contexts:
- FeatureContext:
args:
base_url: http://meusite.dev
parameter1: value1
parameter2:
usuario: vitor
senha: whiskassache
passed => passou
failed => falhou
pending => pendente
undefined => indefinido
skipped => omitido
Uma maneira limpa e simples
de customizar o behat
@BeforeFeature, @AfterFeature
@BeforeScenario, @AfterScenario
@BeforeStep, @AfterStep
Martin Luther King
# language: pt
Funcionalidade: Busca na Wikipedia
Vamos buscar na Wikipedia por Ada Lovelace
e precisamos ver se retorna isto mesmo.
@javascript
Cenário: Busca por Ada Lovelace
Dado estou na página de entrada
E preencho "search" com "Ada Lovelace"
E pressiono "go"
Então devo ver "Ada Augusta King"
“Eu cheguei a seguinte conclusão: não adianta consertar o resto, conserta a gente ajuda pra caramba”
Renato Russo
# language: pt
Funcionalidade: Busca na Wikipedia
Vamos buscar na Wikipedia por Ada Lovelace
e precisamos ver se retorna isto mesmo.
@javascript
Cenário: Busca por Ada Lovelace
Dado estou na página de entrada
E preencho "search" com "Ada Lovelace"
E pressiono "go"
Então devo ver "Ada Augusta King"
vitor@LT.coop.br
t.me/VitorMattos
By Vitor Mattos
https://youtu.be/vwAp5teylF8 https://youtu.be/QVZe7fQck8s https://youtu.be/3j9nnYjOzoc Se você se preocupa com a qualidade de suas aplicações e quer aprender uma forma divertida e muito útil de escrever testes de comportamento, fazer isto com gherkin é o que há de melhor para a sua necessidade!
CTO da LibreCode, empreendedor, sempre buscando novos desafios e conhecimentos. Grande incentivador do software livre, evangelista PHP, palestrante em eventos regionais e nacionais.