Palestra ministrada em 10 de dezembro de 2016 no PHPConference Brasil, o maior evento de PHP da américa latina.
Neste dia, falei e fiz um Live Coding demonstrando conceitos e práticas na criação de Mocks.
Repositório abaixo:
https://github.com/juliodelimas/criando-mocks-prophecy
5. Esses dublês são utilizados, em sua maioria,
dentro de classes de teste de unidade.
O principal objetivo, neste caso, é simular
classes externas a qual está sendo testada.
6. Agora vamos falar um pouco sobre testes de unidade,
por isso, pense em como você desenvolveria
o requisito abaixo?
Pessoa
--------------
float Peso
float Altura
IMC = Peso * Altura ²
IMC menor ou igual a 17 Muito abaixo do peso
IMC maior que 17 e menor ou igual a 18,49 Abaixo do peso
IMC maior que 18,49 e menor ou igual a 24,99 Peso Normal
IMC maior que 24,99 e menor ou igual a 29,99 Acima do Peso
IMC maior que 29,99 e menor ou igual a 34,99 Obesidade I
IMC maior que 34,99 e menor ou igual a 39,99 Obesidade II (severa)
IMC maior que 39,99 Obesidade III (mórbida)
7. Agora vamos falar um pouco sobre testes de unidade,
por isso, pense em como você desenvolveria
o requisito abaixo?
Pessoa
--------------
float Peso
float Altura
IMC = Peso * Altura ²
IMC menor ou igual a 17 Muito abaixo do peso
IMC maior que 17 e menor ou igual a 18,49 Abaixo do peso
IMC maior que 18,49 e menor ou igual a 24,99 Peso Normal
IMC maior que 24,99 e menor ou igual a 29,99 Acima do Peso
IMC maior que 29,99 e menor ou igual a 34,99 Obesidade I
IMC maior que 34,99 e menor ou igual a 39,99 Obesidade II (severa)
IMC maior que 39,99 Obesidade III (mórbida)
Quantos teste seriam necessários para
cobrir todas as possibilidades?
10. Como estes testes tratam de exercitar a menor
parte do código, são denominados testes de unidade.
Lembre-se, testes de unidade são feitos de forma isolada,
ou seja, os testes os métodos de cada classe separadamente
11. Para que isso seja possível, é necessário que os conceitos de
Orientação a Objetos e suas características básicas de
baixo acoplamento e alta coesão sejam utilizados no
desenvolvimento do software
15. Veja um exemplo
// Instanciando a classe concreta
$pessoa = new Pessoa()
// Usando o Prophecy
$profeta = new ProphecyProphet();
$profecia = $profeta->prophesize('Pessoa');
$profecia->getAltura(Argument::any())->willReturn(1.89);
$pessoa = $profecia->reveal();