Upload
julio-de-lima
View
169
Download
4
Embed Size (px)
Citation preview
Criandomocks comphophecy
Júlio deLima@juliodelimas
PHPConferece Brasil 2016
PROPHECY É UMFRAMEWORKOPEN-SOURCECONTRUÍDOCOMOINTUITODEFACILITARA
CRIAÇÃODEDUBLÊSDETESTE
DUBLÊSDETESTESÃOOBJETOSUTILIZADOSPARAIMITAROFUNCIONAMENTODE
OUTROSOBJETOS
HÁ MUITASVARIAÇÕESDEDUBLÊS,MASOSMAISCONHECIDOSSÃO:
DUMMY STUBMOCKNão recebe enemretorna valores
Podem receber valoreseretorna-los,masnãopossuem expectativas
SãoStubsquepossuemexpectativas sobre si
Esses dublês são utilizados,em sua maioria,dentro declassesdetestedeunidade.Oprincipalobjetivo,neste caso,é simularclassesexternas aqual está sendo testada.
Agoravamos falar umpouco sobre testesdeunidade,por isso,pense em como você desenvolveria
orequisito abaixo?
Pessoa--------------float Pesofloat Altura
IMC =Peso*Altura²
IMCmenorouiguala17 Muitoabaixodopeso
IMCmaiorque17emenor ouiguala18,49 Abaixodopeso
IMCmaiorque18,49emenor ouiguala24,99 PesoNormal
IMCmaiorque24,99emenor ouiguala29,99 AcimadoPeso
IMCmaiorque29,99emenor ouiguala34,99 ObesidadeI
IMCmaiorque34,99 emenor ouiguala39,99 ObesidadeII(severa)
IMCmaiorque39,99 ObesidadeIII(mórbida)
Agoravamos falar umpouco sobre testesdeunidade,por isso,pense em como você desenvolveria
orequisito abaixo?
Pessoa--------------float Pesofloat Altura
IMC =Peso*Altura²
IMCmenorouiguala17 Muitoabaixodopeso
IMCmaiorque17emenor ouiguala18,49 Abaixodopeso
IMCmaiorque18,49emenor ouiguala24,99 PesoNormal
IMCmaiorque24,99emenor ouiguala29,99 AcimadoPeso
IMCmaiorque29,99emenor ouiguala34,99 ObesidadeI
IMCmaiorque34,99 emenor ouiguala39,99 ObesidadeII(severa)
IMCmaiorque39,99 ObesidadeIII(mórbida)
Quantostesteseriamnecessários paracobrir todas aspossibilidades?
Nomínimo 4paraocálculo doIMCAltura ePesoinformados,apenas altura informada,
apenas pesoinformado enenhum informado
Eoutros7paracada partição daclassificação doIMCSendo umparacada uma dasclassificações:”Muito abaixo dopeso”,”Abaixo dopeso”,etc.
Comoestes testestratam deexercitar amenorpartedocódigo,são denominados testesdeunidade.
Lembre-se,testesdeunidade são feitos deformaisolada,ou seja,os testesos métodos decada classe separadamente
Paraqueisso seja possível,é necessário queos conceitos deOrientação aObjetos esuas características básicas debaixo acoplamento ealta coesão sejam utilizados no
desenvolvimento dosoftware
Paraautomatizar testesdeunidade noPHPutizaremos oPHPUnit,umframeworkopen-source
muito utilizado pelacomunidade
Assim chegamos ao objetivo douso doProphecy:Simular classesexternas dentro dostestesdeunidade
queavaliam nossas classesemétodos!
Prophecyresume-seaUmprofeta,suas profecias,
algumas promessas epredições
Veja umexemplo
// Instanciando a classe concreta$pessoa = new Pessoa()
// Usando o Prophecy$profeta = new \Prophecy\Prophet(); $profecia = $profeta->prophesize('Pessoa'); $profecia->getAltura(Argument::any())->willReturn(1.89); $pessoa = $profecia->reveal();
LiveCoding!Confira oprojeto norepositório abaixo:
https://github.com/juliodelimas/criando-mocks-prophecy
Dúvidas?
Júlio deLima@juliodelimas
PHPConferece Brasil 2016