O problema
Sempre que executo o teste JUnit em meus projetos (usando JUnit 5 com Java 9 e Eclipse Oxygen 1.a), encontro o problema de que o eclipse não consegue encontrar nenhum teste.
A descrição
Na configuração de execução, o eclipse não consegue nem encontrar o método que está anotado com @Test, mas em vez disso só me mostra " (todos os métodos) ". Espero que a imagem a seguir dê uma ideia melhor da minha configuração:
Saída do console:
java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more
O que eu tentei até agora
Eu ja tentei
- para remover a pasta de teste do caminho de construção e adicioná-la novamente.
- para iniciar o teste passando o mouse sobre o método anotado com @Test e clique em "Executar como teste JUnit".
- remover JUnit do Buildpath e adicioná-lo novamente
- reinicie o eclipse
- Eu também movi todo o projeto de uma máquina para outra e tentei com a instalação do Eclipse fornecida lá
- para renomear o método de teste.
- redigitar a anotação @Test
Algumas dessas etapas podem ser encontradas aqui , mas no final o problema permaneceu.
Respostas:
Você encontrou o bug 525948 do Eclipse, que já foi corrigido e será publicado na próxima versão Oxygen.3 (4.7.3), 21 de março de 2018.
Como solução alternativa, coloque seu código de teste em um projeto separado e adicione o projeto em teste ao caminho de módulo, mas não adicione um
module-info.java
ao seu projeto de teste. Com sua nomenclatura de projeto, classe e módulo, deve ser parecido com isto:Veja também meu vídeo que mostra o Java 9 e o JUnit 5 no Eclipse Oxygen.1a em ação
fonte
module-info.java
). No Eclipse, um projeto Java tem uma única pasta de saída e, portanto, pode conter apenas uma ou nenhumamodule-info.java
. Mas você pode adicionar módulos ao caminho de módulo do projeto, mesmo que o projeto não seja modular (não tenhamodule-info.java
).Corrigi o problema clicando com o botão direito do mouse no teste e selecionando 'Executar configurações' e alterando a seleção "Executor de teste:" para 'JUnit 4' conforme mostrado aqui:
Fiz o teste novamente e funcionou.
fonte
Tenho o mesmo problema com o STS 3.9.1. Parece um bug do Eclipse, no entanto, para corrigir isso, você pode adicionar uma dependência de teste
junit-platform-launcher
ao seu projeto ( https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher )Foi assim que fiz para o meu projeto que usa o Gradle:
dependencies { // other stuff here testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "5.${junit5MinorVersion}" testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: "1.${junit5MinorVersion}" }
arquivo gradle.properties:
junit5MinorVersion=1.0
Acredito que o mesmo se aplica se você vir essa exceção ao usar o IntelliJ IDEA.
fonte
build.gradle
. Se você estiver usando o maven, épom.xml
. O formato do maven é diferente.No meu caso, o problema era eu mesmo e nenhum IDE como o Eclipse. Importei a classe de teste JUnit 4.
Portanto, NÃO importe este:
import org.junit.Test // JUnit 4
Mas IMPORTE aquele:
import org.junit.jupiter.api.Test // JUnit 5
fonte
As respostas até agora não abordaram o problema de compartilhar código com outras pessoas que não necessariamente usam o Eclipse. Aqui está uma proposição. A chave é usar um perfil maven para resolver o caso Eclipse.
Ele assume que você definiu uma propriedade
junit5.version
em seu pom como:<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit5.version>5.1.1</junit5.version> </properties>
em seguida, na
profiles
seção, adicione o seguinte:<profiles> <profile> <id>eclipse</id> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit5.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.1</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </profile> </profiles>
Tudo o que você precisa fazer depois disso é selecionar o perfil em seu Eclipse local: Clique com o botão direito em seu projeto e selecione
Maven > Select Maven Profiles...
(ou pressione Ctrl+ Alt+ P) e, em seguida, verifique o perfil "eclipse" que acabamos de criar.Com isso você terminou. Seu Eclipse executará testes Junit 5 conforme o esperado, mas a configuração que você adicionou não poluirá outras construções ou outros IDE
fonte
Adicionar essa dependência maven com JUnit Jupiter (v.5.5.1) resolve o problema.
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.1</version> <scope>test</scope> </dependency>
fonte
CORREÇÃO SIMPLES: (Adicionar biblioteca JUnit 5)
INSTRUÇÕES:
fonte
Nenhuma das soluções ajudou:
O problema é que o Eclipse 2018-12 tem suporte para JUnit 5.3.1. Se você começar com uma versão anterior, ele irá falhar.
Portanto, certifique-se de usar pelo menos 5.3.1.
5.4.0 também funciona.
No caso de seu pom pai ser Spring Boot, você precisa se certificar (no gerenciamento de dependências) que junit-jupiter-api está configurado para a mesma versão. Você não precisa do junit-platform-runner ou -launcher !
fonte
<junit-jupiter.version>5.4.1</junit-jupiter.version>
para substituir a versão usada na inicialização do Spring (2.1.3.RELEASE).Seguindo a resposta de Andrii Karaivanskyi, aqui está a declaração Maven POM:
<properties> ... <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> ... </properties> <dependencies> ... <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> ... </dependencies>
ATUALIZAR
De acordo com o comentário de Alexander Wessel, você pode usar org.junit: junit-bom conforme descrito em sua resposta à pergunta Eclipse Nenhum teste encontrado usando JUnit 5 causado por NoClassDefFoundError para LauncherFactory .
fonte
scope=import type=pom
, em seguida, adicione dependências ao junit-platform-launcher e junit-jupiter-engine no escopo do teste, sem fornecer uma versão na seção de dependências. O BOM sempre garantirá que você tenha apenas uma versão da plataforma JUnit e do Jupiter no caminho de classe e que as respectivas versões sejam as pretendidas (por exemplo, 5.2.0 com 1.2.0).Para sua informação, outra causa de "Nenhum teste encontrado usando junit5" é (inadvertidamente ou intencionalmente) declarar os casos de teste "privados":
// Example of test case that doesn't get included @Test private void testSomeMethod() { }
Eles precisam ser públicos.
fonte
Eu também enfrentei o mesmo problema, você só precisa adicionar a biblioteca, a Biblioteca Junit já é fornecida com o Eclipse, então você só precisa seguir abaixo
Caminho de construção> Configurar caminho de construção> biblioteca> Adicionar biblioteca> JUnit> Avançar> terminar
Funciona para mim
fonte
Eu tive o mesmo problema depois de criar um novo TestCase: Eclipse -> Novo -> Caso de Teste JUnit. Ele cria uma classe sem modificador de nível de acesso. Eu poderia resolver o problema simplesmente colocando um público antes da palavra-chave class .
fonte
Desde o início, a mensagem de erro informa que a classe não foi encontrada:
NoClassDefFoundError
isso significa que o PATH para junit é o problema.Clique com o botão direito na pasta do projeto e escolha Propriedades OU selecione a pasta do projeto e pressione a combinação cmd + i.
selecione na lista "Caminho de construção Java".
Isso é tudo. Tente executar o teste novamente.
fonte
você deveria saber disso :
@Before de junit4 vai com @Test: " importação org.junit.Test "
E
@BeforeEach de Junit5 vai com: " import org.junit.jupiter.api.Test "
Portanto, certifique-se de usar as importações da mesma versão do Junit, caso contrário, não funcionará, eu acho.
fonte
Usando o STS 3.9.1, tive o mesmo problema. No entanto, atualmente não preciso de nenhum recurso novo do JUnit5, então tentei forçar o uso de uma versão mais antiga. Se estiver usando o maven, você pode adicionar as seguintes dependências ao seu pom.xml:
Isso funcionou para mim (pelo menos contanto que eu não precise do JUnit5 explicitamente).
fonte
Como todos informaram que é um bug do IDE, tentei no
Eclipse
eSTS
. Em ambos os casos, está falhando.Como solução alternativa, resolvi modificando o arquivo pom.xml como abaixo.
Eu adicionei essas duas dependências de maven
junit-jupiter-engine
ejunit-platform-launcher
.pom.xml
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform launcher --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> </dependencies>
Além disso, certifique-se de adicionar a versão de ambas as dependências do maven na tag de propriedades.
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> </properties>
fonte
Estou usando o eclipse 09/09/2019.
Tive que atualizar a versão do junit-bom para pelo menos 5.4.0. Eu já tinha 5.3.1 e isso causava os mesmos sintomas do OP.
Minha configuração agora é:
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.5.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
fonte
Como não é possível postar blocos de código em comentários, aqui está o modelo POM que estou usando em projetos que requerem JUnit 5. Isso permite construir e "Executar como teste JUnit" no Eclipse e construir o projeto com Maven simples.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>group</groupId> <artifactId>project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>project name</name> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.3.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <scope>test</scope> </dependency> <dependency> <!-- only required when using parameterized tests --> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
Você pode ver que agora você só precisa atualizar a versão em um lugar se quiser atualizar o JUnit. Além disso, o número da versão da plataforma não precisa aparecer (em uma versão compatível) em nenhum lugar do seu POM, ele é gerenciado automaticamente por meio da
junit-bom
importação.fonte
Estou a usar:
Spring Tool Suite 4 Versão: 4.4.2.RELEASE Build Id: 201911201053 Java versão: 1.8.0_191
e a mensagem exibida é Nenhum teste encontrado com o executor de teste 'JUnit5'
o que funcionou para mim foi a configuração abaixo
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.5.2</junit-jupiter.version> <junit-platform.version>1.5.2</junit-platform.version> </properties> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency>
fonte
Está faltando o iniciador da plataforma JUnit 5 com grupo: 'org.junit.platform', nome: 'junit-platform-launcher'
Basta adicionar seu POM:
fonte
Mesmo erro que encontrei na versão do eclipse Oxygen.3a Release (4.7.3a). Há um problema de incompatibilidade de dependências do Maven. Para resolver, atualizei meu Pom.xml com as seguintes dependências.
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 com.netapp.junitnmactiopractice JunitAndMactioPractice 0.0.1-SNAPSHOT
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <junit.jupiter.version>5.1.1</junit.jupiter.version> <junit.platform.version>1.1.1</junit.platform.version> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-runner</artifactId> <version>${junit.platform.version}</version> <scope>test</scope> </dependency> </dependencies>
fonte
junit-platform-runner
: " Executor para executar testes e suítes de teste na plataforma JUnit em um ambiente JUnit 4. "Você pode usar somente
junit-jupiter
como uma dependência de teste em vez dejunit-jupiter-api
,junit-platform-launcher
,junit-jupiter-engine
.<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.5.2</version> <scope>test</scope> </dependency>
fonte
Para mim, configurei o caminho de construção para adicionar a biblioteca JUnit 5 e também adicionando a dependência
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.0</version> <scope>test</scope> </dependency>
separadamente.
fonte
Eu também enfrentei esse problema com o Eclipse (versão: 2019-12 (4.14.0)). A solução parece usar IntelliJ ou usar o teste Maven para executar tais testes no Eclipse.
fonte
substituir:
import org.junit.Test;
com:
import org.junit.jupiter.api.Test;
fonte
Na verdade, usei spring-tool-suite-4-4.5.1 e tive esse bug quando quero executar uma aula de teste. e a solução foi adicionar ao 'java build path', 'junit5' em Bibliotecas
fonte
você deveria mudar
@Test public static void testmethod(){}
para
@Test public void testmethod(){}
o @Test é um método estático incompatível
fonte
Encontrei o mesmo erro e, no meu caso, foi uma simples questão de ir
Project Properties > Maven > Update project
e / ou limpar e reconstruir o projeto.fonte
Acabei de adicionar meu Test.class via menu eclipse e funcionou. Clique com o botão direito para projetar -> Novo -> Outro -> JUnit -> Caso de Teste JUnit
fonte
Isso pode ser causado pela versão de junit-platform-launcher / junit-platform-runner.
1.1.0 não funciona
1.4.1 funciona na minha configuração.
Eu acho que este é um bug no eclipse, pois está trabalhando com bibliotecas de versão superior do junit e não outra versão.
Isso resolveu meu problema. A outra resolução parecia menos viável ou arriscada para mim. Obrigado.
fonte