queria tirar uma duvida com vcs, tenho um ambiente com o http://www.eclemma.org/index.html o qual uso para saber qtos % dos meus tests estão cobertos. Quando nao uso uma API de mock, agora estou usando o Mockito a classe core tem seu % de cobertura, porem nas classes que são “mockadas” não aparece a cobertura, porem todos os testes estão passando.
A duvida é como, eu posso resolver isso? de saber qtos % das classes q usam mock estao cobertas?
opa! cv. é isso que está rolando as classes mockadas estão sem cobertura, e achei que tinha algo de errado nisso. que elas deveriam ter, e como faria para cobrir. Então sempre que mockar terei 0% de cobertura, pq?
[quote=LPJava]opa! cv. é isso que está rolando as classes mockadas estão sem cobertura, e achei que tinha algo de errado nisso. que elas deveriam ter, e como faria para cobrir. Então sempre que mockar terei 0% de cobertura, pq?
flw. [/quote]
Porque esse teste não está testando a classe mockada. Crie outro teste para testar essa classe de verdade. Assim vc terá cobertura nela também.
Não gosto de mocks… Para testar interações com o banco utilizo a classe real.
No hibernate.cfg.xml eu configuro: create
E no @BeforeClass de cada teste eu recrio a session factory (assim recria também o banco).
No @BeforeClass eu também populo o banco (que está vazio) com os dados necessários para os testes
Eu faria algo assim no seu teste:
UsuarioDao usuarios = new UsuarioDao();
@Test
public void deveriaBuscarPorEmailUmUsuarioCadastrado()
{
usuario.setEmail("efigenia@");
usuarios.cadastrar(usuario);
Usuario encontrado = usuarios.buscarPorEmail("efigenia@");
assertNotNull(encontrado);
assertEquals(usuario.getEmail(), encontrado.getEmail());
}
Observação: É apenas uma dica de como utilizo. Não sei se a maneira mais adequada, mas no meu caso tem funcionado.
o qual chama o metodo real e mantendo o lance da mock. nao pensei duas vezes para testar e agora está cobrindo.
Vejam como ficou e agora está chamando o metodo real usando uma mock.
Bem, nao sei se há outra forma melhor de fazer isso, mas acho que já atende.
PessoALL gostaria de fazer uma pergunta que deve ser básica para vocês, mas que não entra na minha cabeça.
Por que criar uma método de teste que verifica o resultado do que foi mockado?
Veja o código abaixo. Nunca vai dar erro. Gerou um user com email (linha 3). Mocou o método buscaUsuarioPorEmail que retorna o user criado (linha 4) e fez um assertEquals do que sabemos qual vai ser o retorno. Poderia me explicar o porquê disso? Qual o ganho de criar um teste desse tipo?
@Test
public void testBuscaUsuarioCadastrado() {
user.setEmail("efigenia@");
when(usuarioDaoMock.buscaUsuarioPorEmail(user)).thenReturn(user);
assertEquals(user.getEmail(), usuarioDaoMock.buscaUsuarioPorEmail(user).getEmail());
}
[quote=MPSV]PessoALL gostaria de fazer uma pergunta que deve ser básica para vocês, mas que não entra na minha cabeça.
Por que criar uma método de teste que verifica o resultado do que foi mockado?
Veja o código abaixo. Nunca vai dar erro. Gerou um user com email (linha 3). Mocou o método buscaUsuarioPorEmail que retorna o user criado (linha 4) e fez um assertEquals do que sabemos qual vai ser o retorno. Poderia me explicar o porquê disso? Qual o ganho de criar um teste desse tipo?
@Test
public void testBuscaUsuarioCadastrado() {
user.setEmail("efigenia@");
when(usuarioDaoMock.buscaUsuarioPorEmail(user)).thenReturn(user);
assertEquals(user.getEmail(), usuarioDaoMock.buscaUsuarioPorEmail(user).getEmail());
}
[/quote]
Esse caso especifico nao precisa mesmo. Pra mim só faz sentido por exemplo se “buscarUsuarioPorEmail” lancar alguma excecao ou retornar nulo para que eu possa testar a reação do meu código a esses casos.
Esse exemplo ai nao esta testando o código do cara, esta testando o mockito.