Beruflich Dokumente
Kultur Dokumente
MudandodeTDDparaBDDComBehateSymfony2
/DESENVOLVIMENTO
/BANCODEDADOS
Eventos:
PHPExperience
/MKTDIGITAL
InterCon
DeveloperWeekPOA DevCommerce
/INFRA
/DESENVOLVIMENTO
MudandodeTDDparaBDD
ComBehateSymfony2
FrancescoTassiemDesenvolvimento,PHP
quintafeira,21denovembrode2013
SHARES
A+ A
colega do meu PHP User Group local, j que o projeto era bastante
simples e ns dois estvamos dispostos a aprender algo novo, e
decidimos fazer uma tentativa com BDD. No mundo PHP, BDD significa
Behat, Mink e PHPSpec.
Fiquepordentrodetodasasnovidades,eventos,
cursosemuitomais
cdigo.
ENVIAR
http://imasters.com.br/linguagens/php/mudandodetddparabddcombehatesymfony2/?trace=1519021197&source=single
1/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
Os componentes
O primeiro passo entender com que biblioteca voc tem que lidar:
2/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
configurao:
1
2
3
4
5
behat.yml
default:
paths:
features:features
Isso significa que voc precisa definir passos macro e tem que organizlos em sub- contextos, a fim de manter seu cdigo claro. Voc tambm
vai precisar se acostumar a fazer uma definio passo a passo de
implementao, o que pode ser um pouco confuso no incio.
Eu acho que isso no uma coisa que voc possa aprender com a
documentao, voc vai precisar de um pouco de experincia para ficar
bom nisso. Nesta primeira experincia, eu senti a necessidade de
refatorar e reorganizar minhas etapas de implementao algumas vezes,
at mesmo com um pequeno conjunto de testes. A coisa boa que toda
vez que voc move o cdigo, voc sentir que seu entendimento do
domnio se torna mais profundo. Toda vez que uma etapa comeava a
dar errado, era porque eu estava deixando passar algo em meu domnio,
e cada refatorao me levou a um melhor entendimento da aplicao que
eu estava construindo.
Iniciando os testes
Logo aps a configurao do Behat, eu comecei a escrever recursos para
o meu aplicativo. Eu no escrevi um nico recurso, eu escrevi um monte
deles, s para esclarecer o quadro geral e para me ajudar a decidir por
http://imasters.com.br/linguagens/php/mudandodetddparabddcombehatesymfony2/?trace=1519021197&source=single
3/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
onde comear.
1
2
3
4
5
6
7
8
behat.tml
default:
filters:
tags:"~@tbd"
wip:
filters:
tags:"@wip"
bin/behat
bin/behatprofilewip
Esse no era o meu primeiro projeto guiado por testes, mas eu nunca
tinha escrito um monte de testes funcionais antes da implementao.
Normalmente eu teria escrito o teste para o prximo recurso e ento o eu
http://imasters.com.br/linguagens/php/mudandodetddparabddcombehatesymfony2/?trace=1519021197&source=single
4/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
Eu acho que essa uma das grandes vantagens de BDD: ele realmente
muda a forma como voc pensa sobre sua aplicao. Claro, agora que
eu percebi isso, poderia fazer a mesma coisa usando o bom e velho
PHPUnit, mas antes desse exerccio eu nunca havia focado em descrever
um conjunto de funcionalidades com uma sute de testes antes da
codificao.
A principal diferena entre Behat e seu velho e bom teste funcional que
voc no vai definir um conjunto de dispositivos eltricos em seu mtodo
1
2
Giventhereisa"user1"Userinthedatabase
Andthereare2bookableCourts
Behat expe vrios hooks que voc pode usar para executar aes como
dropping e a construo do banco de dados; eu usei @BeforeScenario
para isso, com uma implementao um pouco diferente do mtodo
loadFixtures LiipFunctionalTestBundle Aqui est minha implementao :
1
2
3
4
5
6
7
publicfunctioncleanDatabase()
{
$container=$this>kernel>getContainer();
$registry=$container>get('doctrine');
$om=$registry>getManager();
$type='ORM';
8 $executorClass='Doctrine\\Common\\DataFixtures\\Executor\\'
http://imasters.com.br/linguagens/php/mudandodetddparabddcombehatesymfony2/?trace=1519021197&source=single
5/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$executorClass='Doctrine\\Common\\DataFixtures\\Executor\\'
$referenceRepository=newProxyReferenceRepository(
$cacheDriver=$om>getMetadataFactory()>getCacheDriver();
if($cacheDriver){
$cacheDriver>deleteAll();
}
$connection=$om>getConnection();
if($connection>getDriver()instanceOfSqliteDriver){
$params=$connection>getParams();
$name=isset($params['path'])?$params['path'
if(!isset(self::$cachedMetadatas)){
self::$cachedMetadatas=$om>getMetadataFactory()>getA
}
$metadatas=self::$cachedMetadatas;
//TODO:handlecasewhenusingpersistentconnections.Fail
$schemaTool=newSchemaTool($om);
$schemaTool>dropDatabase($name);
if(!empty($metadatas)){
$schemaTool>createSchema($metadatas);
}
$executor=new$executorClass($om);
$executor>setReferenceRepository($referenceRepository
}
$purgerClass='Doctrine\\Common\\DataFixtures\\Purger\\'
$purger=new$purgerClass();
$executor=new$executorClass($om,$purger);
$executor>setReferenceRepository($referenceRepository
$executor>purge();
return$executor;
}
Concluso
Acho que vou continuar a explorar com BDD. Ferramentas so maduras e
estveis o suficiente, e todo o ecossistema parece slido e pronto para
usar. Behat e Mink so timas ferramentas, PHPSpec (que eu vou
abordar em outro artigo) to bom quanto.
6/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
estou sempre fazendo a coisa certa e eu tenho alguns velhos hbitos que
preciso perder, mas a impresso geral muito boa.
***
Mensagemdoanunciante:
Conhea a Umbler, startup de Cloud Hosting por demanda feita para agncias e desenvolvedores. Experimente grtis!
FrancescoTassiemDesenvolvimento,PHP
quintafeira,21denovembrode2013
SHARES
leiaagora
HooksdoGitepr
processadoresCSS
DavidWalsh
emDesenvolvimento
Comentrios
Oseuendereodeemailnoserpublicado.Camposobrigatriossomarcadoscom*
Nome
Participedadiscusso,lembresedeserrespeitosoeconstrutivo:)
enviar
http://imasters.com.br/linguagens/php/mudandodetddparabddcombehatesymfony2/?trace=1519021197&source=single
7/8
11/02/2016
MudandodeTDDparaBDDComBehateSymfony2
Hospedado por:
Desenvolvimento
Design
Bancodedados
MarketingDigital
Agenda
CursosOnline
Agile
3dsmax
Interbase
ContedoDigital
Ajax
Acessibilidade
MongoDB
Ecommerce
Frum
InterCon
AnlisedeDados
Arquiteturade
Informao
MySQL
EmailMarketing
7Masters
RevistaiMasters
Oracle
Mercado
PostgreSQL
PublicidadeOnline
SQLServer
RedesSociais
CakePHP
CSS
FrontEnd
HTML
Java
DesignResponsivo
Games
Usabilidade
UserExperience
Tendncias
InfraeCloud
JavaScript
CloudComputing
Mobile
PHP
Linux
Android
Python
MicrosoftAzure
iPhone&iPad
Ruby
Segurana
SiteBlindado
SobreoiMasters
PolticadePrivacidade
Faleconosco
iMastersExpert(englishblog)
http://imasters.com.br/linguagens/php/mudandodetddparabddcombehatesymfony2/?trace=1519021197&source=single
8/8