ClassNotFoundException

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.


image

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

image

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

1 curtida

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:

image

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?