Ao tentar iniciar meu JUnit-Test fora do Eclipse, recebo uma "ClassNotFoundException". Ao executar o "teste mvn" no console - tudo funciona bem. Além disso, não há problemas relatados no Eclipse.
A estrutura do meu projeto é a seguinte:
- projeto pai (empacotamento pom)
- Projeto da Web (war-packaging - meu JUnit-test está aqui)
- Projeto flex
- Projeto de configuração
editar: Como a classe não pode ser encontrada? É um aplicativo HelloWorld simples, sem bibliotecas especiais.
Esta é a configuração de execução do meu JUnit: texto alternativo http://www.walkner.biz/_temp/runconfig.png
Testclass (mas como eu disse; também não funciona com um HelloWorld simples ...):
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;
public class UserDaoTest {
/**
* the applicationcontext.
*/
private ApplicationContext ctx = null;
/**
* the user itself.
*/
private User record = null;
/**
* Interface for the user.
*/
private UserRepository dao = null;
@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}
@After
public void tearDown() throws Exception {
dao = null;
}
@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}
@Test
public final void testIsNoUser() throws Exception {
Assert.assertFalse(dao.isUser("not", "existing"));
Assert.assertFalse(dao.isUser(null, null));
Assert.assertFalse(dao.isUser("", ""));
}
}
Respostas:
Já me deparei com essa situação várias vezes e, depois de muitas tentativas, encontrei a solução.
Verifique o caminho de construção do seu projeto e habilite pastas de saída específicas para cada pasta. Vá um por um através de cada pasta-fonte do seu projeto e defina a pasta de saída que o maven usaria.
Por exemplo, seu projeto da web
src/main/java
deve tertarget/classes
sob o projeto da web, as classes de testetarget/test-classes
também devem ter no projeto da web e assim.Usar esta configuração permitirá que você execute testes de unidade no eclipse.
Apenas mais um conselho, se os testes do seu projeto da web exigirem alguns arquivos de configuração que estão nos recursos, certifique-se de incluir essa pasta como uma pasta de origem e de fazer a configuração do caminho de construção adequada.
Espero que ajude.
fonte
@Ignore
atalhos em todo o lugar e gui!A abordagem do Carlos ajudou! Eclipse - java.lang.ClassNotFoundException
Tente verificar o caminho de classe da configuração do junit run:
funciona para mim.
fonte
seu classpath de construção está correto, é por isso que você pode compilar. o classpath para seu JUnit precisa ser verificado. vá para o menu Executar e escolha 'abrir caixa de diálogo de execução'. lá você deverá ver uma árvore à esquerda com JUnit como opção. abra esse nó e encontre e selecione seu teste. no painel direito, você verá uma guia para classpath. verifique se a classe que o teste está tentando instanciar será encontrada.
editar:
isso parece ser um problema com o maven e seu comportamento após uma versão alterar as pastas de saída padrão do Eclipse. Eu vi soluções descritas onde
mvn clean test
faz o truque oucom os três primeiros, houve relatos de recorrência do problema. o último parece melhor para mim, mas se não funcionar, tente os outros.
aqui e aqui estão algumas informações
fonte
O problema pode estar faltando o arquivo de classe em sua pasta de construção. Uma solução é limpar o projeto e reconstruí-lo.
fonte
Ativar [x] Use JAR temporário para especificar o classpath (para evitar limitações de comprimento do classpath) dentro da guia Classpath da configuração Run funcionou para mim.
Se o seu projeto for enorme e você tiver muitas dependências de outros projetos irmãos e dependências do maven, você pode atingir as limitações de comprimento do classpath e esta parece ser a única solução (além de tornar o diretório para seu repositório local do maven mais curto (o nosso já começa em c: / m2)
fonte
Existem muitas sugestões complicadas aqui.
Eu encontrei esse problema várias vezes com projetos Maven depois de mover recursos arrastando e soltando ou executando a refatoração de nomes de classes.
Se isso ocorrer, simplesmente copie (não mova) o Caso de Teste com problema (
.java
) via terminal / navegador de arquivos para outro local,right-click -> Delete
no Eclipse e escolha excluir no disco quando tiver a opção de mover / copiar o arquivo copiado para o local do arquivo original, em seguida, selecione seu projeto no Eclipse e pressione F5 para atualizar os recursos.Isso é rápido e fácil de fazer e sempre corrigiu o problema para mim.
fonte
Eu tive exatamente o mesmo problema, mas descobri! Vá para o arquivo do seu projeto e clique com o botão direito sobre ele, a seguir clique
Refresh
ou pressione F5. Em seguida, tente executá-lo. Se ainda não funcionar, esqueça, pois tive o mesmo problema EXATA e isso significa apenas que sua versão do Eclipse é um lixo.fonte
Esta foi a minha solução para o problema. Claro, muitas coisas podem fazer com que isso ocorra. Para mim, era que Maven2 (não o plug-in para Eclipse) estava configurando o perfil do eclipse para usar um construtor diferente (aspectJ), mas eu não tinha o plug-in no eclipse./
http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html
Saúde Ramon Buckland
fonte
Sachin está certo: Mesmo com o caminho de classe correto, a guia de problemas mostrará que alguma dependência ou o Recurso / projeto tem um erro que precisa ser corrigido para que o maven construa e crie classes automaticamente quando você cria ou faz uma mudança em sua classe de teste .
"Oi,
É julho muito antigo (que ano), mas eu tive o mesmo problema.
O problema real descobriu que o eclipse não foi capaz de gerar o arquivo de classe para o arquivo java, o classpath era adequado.
Veja a aba de problemas e verifique se está faltando algo / arquivo em seu projeto. você pode criar um novo proj e adicionar arquivos um por um e construí-los até que ele pare de compilar e criar classes (verifique o workspace / proj / bin / package / folder para classes)
é estranho, mas é verdade, o ecplise estava falhando na conclusão porque 4 dos 20 arquivos java estavam usando uma única imagem que estava faltando. e, como resultado, nenhum arquivo java foi compilado.
CLASSPATH não é um problema aqui. "
fonte
Tivemos a exceção exata (usando SpringSource Tools, tomcat, no Win7) e a causa foi que refatoramos um nome de arquivo (renomeado um arquivo) de SubDomain.java para Subdomain.java (D vs d) e de alguma forma colidiu embora SpringSource fosse mostrando o novo nome Subdomain.java. A solução foi deletar o arquivo (via SpringSource) e criá-lo novamente com o nome Subdomain.java e copiar e colar seu conteúdo anterior. Simples assim.
fonte
Eu resolvo esse caminho Bulit ---> bibliotecas ---> adicionar biblioteca ---> Junit check junit4
fonte
clique em
project->properties->Java build path->Source
e verifique se cadasrc
pasta ainda é válida, existe ou foi removida recentemente. Corrija qualquer caminho ausente ou incorreto, reconstrua e execute o teste. Isso vai resolver o problema.fonte
Tudo que fiz foi Propriedades -> Caminho de construção Java -> Pedido e exportação -> Habilitei todas as caixas desmarcadas -> movi o Junit totalmente para cima
fonte
Tentou
trabalhou depois
Maven 2 LifeCycle >> teste
fonte
Eu tentei todas as soluções nesta página: atualizar o projeto, reconstruir, todos os projetos limpos, reiniciar o Eclipse, reimportar (até) os projetos, reconstruir o maven e atualizar. Nada funcionou. O que funcionou foi copiar a classe para um novo nome que funcione bem - bizarro, mas verdadeiro.
Depois de aguentar isso por algum tempo, resolvi:
Run
menuRun Configurations
Run Configuration
pressionando delete ou clicando no X vermelho.Algo deve ter errado com a configuração de execução em cache.
fonte
Excluir o projeto do eclipse (não do disco rígido), que de certa forma está limpando o espaço de trabalho e reimportando o projeto para o eclipse, funcionou para mim.
fonte
Normalmente, esse problema ocorre ao executar a
java
ferramenta de aplicativo java, incapaz de encontrar o arquivo de classe.Principalmente no projeto maven, vemos esse problema devido ao problema de sincronização Eclipse-Maven . Para resolver este problema: Maven-> Atualizar configuração
fonte
Você já tentou clicar com o botão direito do mouse na raiz do seu projeto, selecionando "propriedades" e verificando se o CLASSPATH está correto? Se bem me lembro, é assim que você faz.
Alguma coisa sobre a maneira como o Eclipse executa testes de unidade que exige que você adicione o JAR junit ao CLASSPATH de tempo de execução de uma maneira especial?
Eu uso o IntelliJ, então não tenho esses problemas.
Eu mesmo verificaria o Eclipse, mas prefiro não tê-lo na minha área de trabalho.
fonte
Hmm, parece um pouco bizarro, tente executá-lo com a seguinte anotação no início da aula:
e me diga como você está lidando com isso.
Verifique se você também ativou a compilação automaticamente. Se você quiser ter certeza de que suas classes de teste estão sendo compiladas corretamente, limpe a pasta de destino Maven (e qualquer pasta bin que o Eclipse possa estar usando). Você também está usando m2eclipse, pois acho um pouco problemático.
fonte
A solução para o meu problema era semelhante: as libs eram inválidas. Se você olhar no arquivo .classpath do projeto, verá as tags classpathentry com a chave / valor kind = "lib". Algumas das minhas estavam incorretas.
Eu não descobri isso até desligar as configurações de validação. Ou seja, havia tantos erros nos arquivos JSP, etc, que os erros do classpath não eram evidentes (ou possivelmente apareciam). Como resultado, nada estava sendo compilado nas pastas de saída de destino, mas nenhum erro útil sobre o motivo.
fonte
Aponte para corrigir o JDK em Windows> Preferências> Java> JRE instalado.
Não aponte para jre, aponte para um JDK adequado. Apontei para o JDK 1.6U29 e atualizei o projeto.
A partir de agora, o problema desapareceu e os testes jUnit estão funcionando bem.
Obrigado,
-Tapas
fonte
Eu encontrei o mesmo erro no Eclipse recentemente, ou seja, o IDE do Eclipse não conseguiu encontrar a classe de teste de unidade, não importa como eu alterei as configurações. Aprendendo com as postagens anteriores aqui e em outros sites, verifiquei duas vezes e três vezes o classpath e as informações de origem, e movi para cima e para baixo a pasta de origem e as bibliotecas, tanto em "Run Configuration" quanto em "Java Build Path "config windows e também limpei o projeto e o reconstruí, mas nenhum dos truques funciona para mim. O projeto Java específico é um projeto antigo compilado ANT e tem muitos jars incluídos na biblioteca Eclipse.
Em seguida, alterei a classe de teste de unidade para adicionar um método main () e clique com o botão direito para "Executar como" um aplicativo Java em vez do teste JUnit e, de repente, o Eclipse parece despertar e identificar a classe corretamente. Depois disso, mudei de volta para um aplicativo de teste de unidade e ainda está funcionando.
Este parece ser um bug no Eclipse, estou supondo que o grande número de bibliotecas (> 260) pode confundir a capacidade da JVM de localizar minha classe JUnit.
fonte
Eu também fui atingido com esse problema e consegui encontrar uma solução suficiente para o meu caso. Se o seu projeto Eclipse tiver um arquivo .classpath na raiz do projeto (veja-o na visualização Navigator em vez da visualização Package Explorer), certifique-se de que o seu caminho de classe Maven apareça antes do seu caminho de classe JRE Container.
Se o seu projeto não tiver um arquivo .classpath, você pode editar o caminho de construção Java do projeto para alternar o pedido e a exportação. Se o seu projeto tiver o arquivo .classpath e você alterar sua ordem apenas no Java Build Path, verá que a ordem não foi afetada e o problema continuará a ocorrer.
E um projeto-> limpo nunca prejudica as coisas depois que você faz a mudança.
fonte
Certifique-se de que sua configuração de inicialização de teste NÃO contenha as seguintes linhas OU tente habilitar o gerenciamento de dependência Maven automatizado.
fonte
Tentei tudo o que li neste longo post e, incrivelmente, o que funcionou para mim foi, ao invés de clicar na classe de teste e selecionar
Run as JUnit test
, clicar no método de teste e executar comoJUnit test
. Eu não tenho ideia do porquê?fonte
O teste JUnit de dentro do eclipse também me deu NoClassDefFoundError. Executar 'mvn clean test' na linha de comando deu-me o seguinte erro em vários jars: cabeçalho LOC inválido (assinatura incorreta) Excluir esses jars do repositório local m2 e executar 'mvn clean test' novamente resolveu meu problema.
fonte
Eu tive o mesmo problema. Tudo o que eu fiz foi,
Eu). Artefatos de Eclipse gerados
mvn clean eclipse:eclipse
ii). Atualize o projeto e execute novamente o teste junit. Deve funcionar bem.
fonte
Além disso, DOUBLE-CHECK a caixa de diálogo eclipse "Web Deployment Assembly".
Isso pode ser encontrado: Propriedades do projeto-> Montagem de implantação.
Recentemente, um plug-in do eclipse modificou um dos meus projetos da web e adicionou ~ misteriosamente ~ adicionou os diretórios de teste maven / src / test / java, / src / test / resources ao Deployment Assembly. UGGGG !!!
É por isso que meu projeto funcionou bem quando eu construí e implantei apenas o maven direto no tomcat, sem ClassNotFoundExceptions ... No entanto, quando fiz a implantação através do Eclipse, Whammo !! Começo a obter ClassNotFoundExceptions porque o TestCode está sendo implantado.
Eric
fonte
Isso significa que seu pom.xml tem problemas não resolvidos. Abra a visualização de problemas e resolva de acordo. Então, você poderá executar os casos de teste com êxito, sem encontrar a exceção classnotfound.
fonte
Alterar a ordem dos artefatos de classpath no Java Build Path resolveu para mim.
Isso deve consertar.
fonte