Escrevi um método de teste simples com JUnit 5:
public class SimlpeTest {
@Test
@DisplayName("Some description")
void methodName() {
// Testing logic for subject under test
}
}
Mas quando eu corro mvn test
, eu tenho:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
De alguma forma, o surefire não reconheceu essa classe de teste. Minha pom.xml
aparência é:
<properties>
<java.version>1.8</java.version>
<junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
Alguma ideia de como fazer isso funcionar?
Respostas:
O
maven-surefire-plugin
, a partir de hoje, não tem suporte total do JUnit 5 . Há um problema em aberto sobre a adição deste suporte no SUREFIRE-1206 .Como tal, você precisa usar um provedor personalizado . Um já foi desenvolvido pela equipe JUnit; do guia do usuário , você precisa adicionar o
junit-platform-surefire-provider
provedor e aTestEngine
implementação para a nova API:Além disso, certifique-se de declarar a
junit-jupiter-api
dependência com um escopo detest
:fonte
maven-surefire-plugin v2.21.0
funciona bem comjunit-jupiter-engine v5.2.0
ejunit-platform-surefire-provider v1.2.0
Atualização 2
O problema foi corrigido no Maven Surefire Plugin v2.22.0
A nova versão está disponível no Repositório Central Maven.
Maven
Gradle
Atualizar
Como Marian apontou, a versão mais recente do JUnit 5 Platform Surefire Provider (1.2.0) oferece suporte à versão mais recente do Maven Surefire Plugin (2.21.0) :
Exemplo
pom.xml
TestScenario.java
Saída (instalação limpa mvn)
Maneira mais simples até hoje:
fonte
Da documentação do JUnit 5 :
Além disso, você pode ler na
maven-surefire-plugin
documentação :Então, isso é o suficiente para fazer os testes JUnit 5:
No meu espaço do GitHub, adicionei um projeto de amostra de trabalho do maven que você pode navegar / clonar.
URL: https://github.com/ebundy/junit5-minimal-maven-project
fonte
Eu encontrei esse problema com JUnit5 e Maven, mas também notei que, mesmo se apenas junit-jupiter-engine fosse adicionado como uma dependência, os testes seriam executados em alguns projetos, não em outros . E eu meio que vejo o mesmo padrão nos comentários aqui: No comentário do @Alex acima, você pode ver que ele não tem nenhum problema, mesmo com versões anteriores de surefire / junit / platform.
Depois de coçar a cabeça por algum tempo, percebi que aqueles projetos em que os testes não funcionavam eram aqueles em que os nomes dos métodos de teste não continham a palavra "teste". Embora isso não seja obrigatório por http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
Em outras palavras: apenas com
isto
NÃO será executado, enquanto
SERÁ executado!
Este problema se desenrola como uma boneca russa ...
De qualquer forma, +1 para @Mikhail Kholodkov, cuja resposta atualizada corrige todos os problemas de uma vez!
fonte
Eu encontrei o mesmo problema em agosto de 2019 sobre o qual perguntei aqui: o Maven falha silenciosamente em encontrar testes JUnit para executar . Essas respostas me levaram na direção certa, mas descobri que você pode resolver o problema de forma ainda mais concisa. Copiei minha solução do projeto Maven de amostra JUnit5 .
A partir do JUnit 5.5.1 e
maven-surefire-plugin
2.22.2, você não precisa adicionar ajunit-platform-surefire-provider
dependência. É suficiente ter esta dependência e um plug-in especificado empom.xml
:fonte
Só para complementar, o surefire 2.22.0 + junit 5.2.0 + plataforma 1.2.0 também funciona. Em anexo está um pom de trabalho para sua referência:
fonte
junit-vintage-engine
uma dependência e todos os meus testes foram escritos para o JUnit 4.No meu caso, isso foi por causa do TestNG no caminho de classe ( SUREFIRE-1527 ). Groovy 2.5.5 POM trouxe com o
groovy-testng
módulo.O provedor de estrutura de teste especificado manualmente (conforme descrito em https://maven.apache.org/surefire/maven-surefire-plugin/examples/providers.html ) resolveu o problema:
fonte
<dependency>
em<dependencies>
sua amostra de código.Há um problema em aberto para o surefire 2.20
Está funcionando para mim com o surfire 2.19 + junit-platform- * 1.0.3
fonte
Eu tive um problema semelhante também fazendo com que o Surefire reconhecesse zero testes.
Meu problema acabou por estar relacionado ao seguinte (da documentação JUnit 5.1.0 / maven ):
Eu estava tentando usar as versões mais recentes do Surefire (2.21.0) e junit-platform-surefire-provider (1.1.0), e não funcionou (nem no Java 8 ou 9)
Voltar para o Surefire 2.19.1 resolveu meu problema.
De acordo com este problema, uma correção será incluída na versão 1.2.0 do junit-platform-surefire-provider (atualmente disponível apenas como SNAPSHOT).
fonte
Uma coisa eu percebi que consegui fazer funcionar:
ClinicCalendarShould
não foi escolhido pelo mavenClinicCalendarTest
PODE ser escolhido pelo mavenPortanto, a menos que esteja faltando algum tipo de configuração ou parâmetro ou qualquer outra coisa no plug-in infalível, por padrão, você precisa nomear suas classes de teste como XXXTest.
fonte
A atualização para
maven-surefire-plugin:2.20
executa os testes do Junit5 sem problemas.Mas estou usando a
M6
versão no Junit5.fonte
No meu caso, o plugin infalível não obteve a versão correta do jupiter-engine / api. E isso mesmo rodando o Maven 3.6.1 e o surefireplugin Versão 2.22.2!
Agora, minha configuração de plug-in infalível se parece com:
Além disso, tive que forçar estas versões:
Parece que 5.5.2 foi vinculado à versão 1.3.2 da plataforma errada em vez de 1.5.2 no meu caso.
Todos os testes JUnit5 são selecionados agora. Mesmo com o 2.22.0 do plugin infalível, esse não foi o meu caso!
Espero que ajude...
fonte
Eu estava enfrentando o mesmo problema
junit5
e osmaven-surefire
testes estavam falhando. No entanto,junit4
estava funcionando bem. A combinação abaixo funcionou para mim, não adiciono o controle de versão. Usejunit-bom
para gerenciamento de dependências. Usandospring-boot
2.1.4
Certifique-se de atualizar para a versão mais recente do eclipse
fonte