Olá,
Ao testar uma classe usando o Mockito, me deparei com o erro “ClassNotFoundException”. Infelizmente não consigo resolver este erro.
Todas as minhas dependências estão instaladas, mas o erro persiste.
Olá,
Ao testar uma classe usando o Mockito, me deparei com o erro “ClassNotFoundException”. Infelizmente não consigo resolver este erro.
Todas as minhas dependências estão instaladas, mas o erro persiste.
Estranho que não encontrou foi a própria classe de teste CalculadoraTest. Em qual lugar a classe de teste está no seu projeto?
obs.: E esse teste está testando nada viu.
A classe de teste se encontra no mesmo package da calculadora que eu desejo testar
Porque não está testando nada? Estaria faltando o “thenReturn”?
As classes de teste geralmente ficam em /test, não?
E o código principal em /src
O seu verify está verificando um código que o teste está executando, e isso não está certo.
Como dito pelo @RoinujNosde, a classe de teste tem que ficar no em src/main/test e a classe que vc está testando, deve ficar em src/main/java. O objetivo do teste é testar o código de produção, ou seja, o código que está em src/main/java.
Se vc escreve uma classe de teste que chama um método, é claro que o método será chamado no teste, não há por que fazer um verify como vc fez. O verify faz sentido, se vc estiver testando uma chamada dentro da classe CalculadoraPreco de alguma dependência mockada.
Veja esse exemplo em que faz mais sentido usar o verify:
public class Calculadora {
private ServicoRemoto servicoRemoto;
public Calculadora(ServicoRemoto servicoRemoto) {
this.servicoRemoto = servicoRemoto;
}
public int somar(int a, int b) {
return servicoRemoto.somar(a, b);
}
}
Supondo que vc queira verificar que o método do servicoRemoto tenha sido chamado:
@Test
void test() {
// Arrange
ServicoRemoto mockServicoRemoto = mock(ServicoRemoto.class);
Calculadora calculadora = new Calculadora(mockServicoRemoto);
int numA = 2, numB = 2;
// Act
int resultado = calculadora.somar(numA, numB)
// Assert
verify(mockServicoRemoto, Mockito.times(1)).somar(numA, numB);
}
O exemplo é simples, mas a ideia é mostrar que, ao chamar o método somar da Calculadora, o verify está verificando que o método da dependência ServicoRemoto, que foi mockado, foi executado como o esperado.
Meu arquivo main e as outras classes ficam no: eclipse-workspace\Pizzaria\src\br\com\pizzaria\desenvolvimento
enquanto a classe de testes fica na pasta: eclipse-workspace\Pizzaria\src\br\com\pizzaria\desenvolvimento\serviços
Saberia me informar se isso causa algum problema?
Mesmo não sendo uma boa prática, consigo deixar o teste na pasta serviços mesmo? Ou eu teria que mudar para que o teste funcionasse?
Teve um print que tu mandou que tem um pom.xml. Se seu projeto for maven, essa estrutura de pastas está estranha. As pastas deveriam estar seguindo esse padrão: Introduction to the Standard Directory Layout
Saberia me informar como eu consigo testar a minha classe CalculaPreco no código abaixo usando o mockito? Apenas desejo saber se eu colocar “pizza” por exemplo, se o meu código executará o p.setPreco(20.0f);
package br.com.pizzaria.desenvolvimento;
public class CalculaPreco {
private String produtoDeCalc;
public CalculaPreco(String produto) {
this.produtoDeCalc = produto;
}
public void precoProduto(Pedido p) {
System.out.println("Produto: " + produtoDeCalc);
System.out.println("Printando o tipo do produto: " + produtoDeCalc.getClass().getSimpleName());
if (produtoDeCalc.equals("pizza")) {
p.setPreco(20.0f);
}
else if(produtoDeCalc.equals("coxinha")) {
p.setPreco(3.0f);
}
else if(produtoDeCalc.equals("esfirra")) {
p.setPreco(5.0f);
}
else {
System.out.println("Não temos o seu pedido");
System.out.println("Terminando pedido...");
System.exit(0);
}
}
}
Este projeto iniciou-se como um projeto padrão, sem ter o objetivo de testar nada, apenas fazer um sistema de uma pizzaria básica.
Mais tarde eu converti o meu projeto para Maven, mas infelizmente não consegui adicionar a path “Maven Dependencies”. O que me obrigou a adicionar JARs externos
Entendo. Na verdade todo esse questionamento sobre o local onde a classe foi criada, foi pensando que o projeto era no formato maven. Seu projeto deve está com algum problema de configuração.
Pois acabei de criar um projeto não maven aqui com uma classe e com uma classe de teste, e o teste rodou sem problemas.
Qual a versão da jdk que vc está usando?
Estou usando a versão 1.8.0_291
Esse é o projeto que criei aqui para testar. Tente executar o teste da classe CalculadoraTest no seu ambiente:
exemplo-teste.zip (4,5,KB)
Eu consegui arrumar a estrutura de arquivos de acordo com o Maven. Mas infelizmente ainda não consigo fazer com que as dependências sejam baixadas automaticamente.
Abaixo a organização dos arquivos:
Já configurei o pom.xml para baixar as dependências do Junit. Mas não sei por qual motivo ele não as baixa automaticamente
O maven está configurado na sua maquina e na IDE?
Sim está sim. Criei o projeto no formato Maven. Mas não sei o porque não consigo baixar o path Maven dependencies
O que acontece se vc executar o comando mvn package
na pasta raiz do projeto?