Quando estava no workshop sobre DDD na Caelum, o Phillip falou que na Thoughtworks eles usavam o Mockito para criar os mocks dos objetos. Só uma esclarecida rápida, objetos mock são aqueles criados para simularem algum comportamento. O cenário preferido é aquele onde um objeto depende de outro para funcionar. Você tem um ServiceQQ onde o mesmo depende de um objeto que use algum webservice, como naquele momento você não tem isso implementado, então é criado um mock e passado para seu Service.
Baseado nisso, montei um exemplo para calcular as multas referentes a um carro. Existe o objeto do tipo Detran(orgão responsável pelo trânsito na Bahia) que usa um serviço para saber as multas de determinado carro e, caso existam multas, o valor total é associado ao mesmo. Como eu queria só testar a associação do valor total, não queria usar a implementação verdadeira da interface VerificadorDeMultas, então criei um mock. Abaixo segue o código.
package br.com.settech.exemplo;
import java.math.BigDecimal;
import java.util.Collection;
public class Detran {
private VerificadorDeMultas verificadorDeMultas;
public Detran(VerificadorDeMultas verificadorDeMultas){
this.verificadorDeMultas = verificadorDeMultas;
}
public Carro verificaMultasDoCarro(Carro carro){
Collection<Multa> multas = this.verificadorDeMultas.verificaMultas(carro);
if(multas.size()>0){
BigDecimal valorMultas = BigDecimal.ZERO;
for(Multa multa : multas){
valorMultas = valorMultas.add(multa.getValor());
}
carro.setValorDasMultas(valorMultas);
}
return carro;
}
}
package br.com.settech.exemplo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class TestVerificadorMultas {
@Test
public void testVerificacaoDeMultas(){
Carro carro = new Carro("jpg-4060","Celta");
VerificadorDeMultas verificadorDeMultas = Mockito.mock(VerificadorDeMultas.class);
List<Multa> multas = new ArrayList<Multa>();
multas.add(new Multa(new BigDecimal(50),"Passou no vermelho"));
multas.add(new Multa(new BigDecimal(100),"Sem cinto"));
//adicionando comportamento
/*
* Quando chamarem o metodo verificaMultas, então é retornado minha colecao.
*/
Mockito.when(verificadorDeMultas.verificaMultas(carro)).thenReturn(multas);
Detran detran = new Detran(verificadorDeMultas);
Assert.assertEquals(new BigDecimal(150),detran.verificaMultasDoCarro(carro).getValorDasMultas());
}
@Test
public void testCarroSemMulta(){
Carro carro = new Carro("jpg-4060","Celta");
VerificadorDeMultas verificadorDeMultas = Mockito.mock(VerificadorDeMultas.class);
Detran detran = new Detran(verificadorDeMultas);
Assert.assertEquals(BigDecimal.ZERO,detran.verificaMultasDoCarro(carro).getValorDasMultas());
}
}

Denis Guedes Rangel
07-11-2008 às 10:04:48
Roger Leite
07-11-2008 às 14:16:10
Alberto
07-11-2008 às 15:55:15
André Faria Gomes
08-11-2008 às 12:34:48
Alberto
08-11-2008 às 18:08:45
Daniel S S Ribeiro
09-11-2008 às 12:03:43