Eu tenho um programa maven, ele compila bem. Quando executo, mvn test
ele não executa nenhum teste (no cabeçalho TESTs diz There are no tests to run.
).
Eu recriei esse problema com uma instalação super simples que incluirei abaixo, bem como a saída quando executada -X
.
Os testes de unidade são bem executados no eclipse (ambos com seu pacote junit padrão e quando eu incluo o junit.jar baixado pelo maven). Além disso, o mvn test-compile
cria corretamente a classe em classes de teste. Estou executando isso no OSX 10.6.7 com Maven 3.0.2 e java 1.6.0_24.
Aqui está a estrutura de diretórios:
/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my_group</groupId>
<artifactId>my_program</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Program</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
ClassUnderTest.java:
public class ClassUnderTest {
public int functionUnderTest(int n) {
return n;
}
}
ClassUnderTestTests.java:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class ClassUnderTestTests {
private ClassUnderTest o;
@Before
public void setUp() {
o = new ClassUnderTest();
}
@Test
public void testFunctionUnderTest_testCase1() {
Assert.assertEquals(1, o.functionUnderTest(1));
}
@Test
public void testFunctionUnderTest_testCase2() {
Assert.assertEquals(2, o.functionUnderTest(2));
}
}
Fim do teste mvn -X:
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: sun.misc.Launcher$AppClassLoader@5224ee]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator -->
[DEBUG] (s) basedir = /Users/aaron/Programs/my_program
[DEBUG] (s) childDelegation = false
[DEBUG] (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes
[DEBUG] (s) disableXmlReport = false
[DEBUG] (s) enableAssertions = true
[DEBUG] (s) forkMode = once
[DEBUG] (s) junitArtifactName = junit:junit
[DEBUG] (s) localRepository = id: local
url: file:///Users/aaron/.m2/repository/
layout: none
[DEBUG] (f) parallelMavenExecution = false
[DEBUG] (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile}
[DEBUG] (s) printSummary = true
[DEBUG] (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml
[DEBUG] (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test}
[DEBUG] (s) redirectTestOutputToFile = false
[DEBUG] (s) remoteRepositories = [ id: central
url: http://repo1.maven.org/maven2
layout: default
snapshots: [enabled => false, update => daily]
releases: [enabled => true, update => never]
]
[DEBUG] (s) reportFormat = brief
[DEBUG] (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] (s) session = org.apache.maven.execution.MavenSession@dfbb43
[DEBUG] (s) skip = false
[DEBUG] (s) skipTests = false
[DEBUG] (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes
[DEBUG] (s) testFailureIgnore = false
[DEBUG] (s) testNGArtifactName = org.testng:testng
[DEBUG] (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java
[DEBUG] (s) trimStackTrace = true
[DEBUG] (s) useFile = true
[DEBUG] (s) useManifestOnlyJar = true
[DEBUG] (s) workingDirectory = /Users/aaron/Programs/my_program
[DEBUG] -- end configuration --
[INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program]
[DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository]
[DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program]
[DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test)
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test
[DEBUG] Test Classpath :
[DEBUG] /Users/aaron/Programs/my_program/target/test-classes
[DEBUG] /Users/aaron/Programs/my_program/target/classes
[DEBUG] /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.089s
[INFO] Finished at: Mon May 30 12:03:09 EDT 2011
[INFO] Final Memory: 7M/62M
[INFO] ------------------------------------------------------------------------
**/*Tests.java
é uma inclusão padrão!Também descobri que o código de teste da unidade deve ser colocado na pasta de teste, não pode ser reconhecido como classe de teste se você o colocar na pasta principal. por exemplo.
Errado
Direita
fonte
<scope>test<scope>
) nopom.xml
arquivo fez isso por mim.Outra coisa que pode fazer com que o Maven não encontre os testes se a embalagem do módulo não for declarada corretamente.
Em um caso recente, alguém fez
<packaging>pom</packaging>
e meus testes nunca foram executados. Eu mudei para<packaging>jar</packaging>
e agora funciona bem.fonte
package type is pom - so not running tests
- para dar uma pista aos desenvolvedores :(ATUALIZAR:
Como @scottyseus disse nos comentários, a partir do Maven Surefire 2.22.0, o seguinte é suficiente:
Ao usar o JUnit 5, encontrei o mesmo problema. O Maven Surefire precisa de um plug-in para executar os testes do JUnit 5. Adicione isto ao nosso
pom.xml
:Fonte: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
fonte
junit-platform-surefire-provider
.surefire-provider
oujupiter-engine
. Meus testes parecem correr bem sem eles, pelo menos. veja esta resposta .org.junit.jupiter.api.Test
vez deorg.junit.Test
usar este plug-in ou os testes não serão encontrados.Além disso, verifique se o diretório de classes de teste (por exemplo, src / test / java) corresponde ao diretório listado na propriedade
<testSourceDirectory>
no seu pom.xml, na<build>
propriedade Levei um tempo para encontrar isso.fonte
O Maven não executará seus testes se o projeto tiver
<packaging>pom</packaging>
Você precisa definir o empacotamento para jar (ou algum outro tipo de artefato java) para que os testes sejam executados:
<packaging>jar</packaging>
fonte
No meu caso, estava adicionando o junit-vintage-engine, o que o torna compatível com a versão mais antiga dos testes JUnit e pode executá-los. Como eu estou usando o JUnit 5.
fonte
Muitas dessas respostas foram úteis para mim no passado, mas eu gostaria de adicionar um cenário adicional que me custou algum tempo, pois pode ajudar outras pessoas no futuro:
Certifique-se de que as classes e métodos de teste sejam públicos.
Meu problema era que eu estava usando um recurso de geração automática de classe / métodos de teste do meu IDE (IntelliJ) e, por algum motivo, ele os criou como pacote-privado. Acho que é mais fácil perder do que se poderia esperar.
fonte
Verifique se (para o jUnit - 4.12 e o plugin Eclipse surefire)
fonte
src/test/java
. A convenção de pacotes é para estrutura e para permitir o acesso de testes a métodos privados de pacotes.Descoberto se você prefixar um teste com 'Resumo', ele também será ignorado por padrão.
fonte
*/TestAbstractSomeClassName.java
.Eu luto com esse problema. No meu caso, não estava importando a anotação correta no @Test .
1) Verifique se o @Test é do org.junit.jupiter.api.Test (se você estiver usando o Junit 5).
2) Com o Junit5 em vez de
@RunWith(SpringRunner.class)
, use@ExtendWith(SpringExtension.class)
fonte
Se você possui um aplicativo Java / Groovy compartilhado e tudo o que possui são testes de unidade do Groovy, o Maven não encontrará nenhum teste. Isso pode ser corrigido adicionando um teste de unidade em src / test / java.
fonte
Eu também tive um problema semelhante, depois de explorar descobri que a dependência do testng está causando esse problema. Depois de remover a dependência testng do pom (como eu não preciso mais dele), ele começou a funcionar bem para mim.
fonte
Se você criou um
Spring Boot
aplicativo usando o Spring Initializr , os testes estão sendo executados corretamente no Intellij Idea. Mas, se tentar executar testes a partir de uma linha de comando:Você pode ter se surpreendido por não ter realizado nenhum teste. Eu tentei adicionar
surefire plugin
sem sorte. A resposta foi simples:pom.xml
continha a seguinte dependência:A exclusão,,
junit-vintage-engine
é dedicada a manter a compatibilidade com versões anterioresJUnit 4.x
. Portanto, novas versões do Spring Boot Initializr não o suportam por padrão. Depois que eu removi a exclusão,Maven
comecei a ver os testes do projeto.fonte
Se o nome da sua classe de teste não seguir a convenção de nomenclatura padrão (conforme destacado por @axtavt acima), você precisará adicionar o nome do padrão / classe
pom.xml
no para que o Maven faça o teste -fonte
deveria estar
O Maven encontra o teste final ou inicia com o teste para executar automaticamente.
No entanto, você pode usar
para executar seus testes.
fonte
Aqui está o código exato que tive que adicionar ao meu pom.xml:
E aqui estão minhas dependências:
fonte
Eu enfrentei o mesmo problema, resolvido pela alteração abaixo no pom.xml:
...
alterado para:
fonte
Outro motivo para não executar os casos de teste aconteceu comigo - eu tinha uma propriedade chamada "test" para propósitos completamente diferentes, mas interferia no plug-in surefire. Portanto, verifique seus POMs para:
e remova-o.
fonte
Mais uma dica (além das respostas anteriores):
No Eclipse, vá para Propriedades do seu projeto> clique em
Run/Debug Settings
:Lá você pode adicionar (Novo ...) ou remover (Excluir) quaisquer testes de JU (JUnit) que você tiver no seu projeto (na
src/test/java
pasta ou curso).fonte
Se você escreveu seus testes no JUnit 4 e adicionou dependências do JUnit 5 ao plug-in surefire, seus testes não serão executados.
Nesse caso, basta comentar as dependências do JUnit 5 no plugin surefire:
fonte
A seguir funcionou muito bem para mim no dia 5 de junho
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
fonte
No meu caso, somos aplicativos de migração de múltiplos módulos para o Spring Boot. Infelizmente, o maven não executou mais todos os testes nos módulos. A nomeação das Classes de Teste não mudou, estamos seguindo as convenções de nomeação.
No final, ajudou, quando adicionei a dependência
surefire-junit47
ao pluginmaven-surefire-plugin
. Mas não pude explicar por que foi tentativa e erro:fonte
Eu estava executando os casos de teste do Junit-5 com o maven 3.6.2 e estava sempre mostrando a execução do teste: 0
[
Os testes Junt-5 não estão sendo executados sob o link do maven salvo no meu dia.
fonte
junitArtifactName
também pode ser o caso se o JUnit em uso não for o padrão (junit:junit
), mas por exemplo ...fonte
Caso alguém tenha pesquisado e eu não o resolva, eu tinha uma biblioteca para diferentes testes:
Quando instalei o junit, tudo funcionou, espero e ajudo isso:
fonte
eu usei usando esse código
no meu pom.xml, apenas garanta que o arquivo testng seja específico
fonte
Esse problema pode ocorrer quando você usa o plug-in surfire 3.x.x + com o JUnit5 e, por engano, anota a classe de teste com a
@Test
anotação do JUnit4.Use:
org.junit.jupiter.api.Test
(JUnit5) em vez deorg.junit.Test
(Junit4)NOTA: isso pode ser difícil de notar, pois o IDE pode executar esses problemas sem o teste JUnit4.
fonte
Outro problema facilmente esquecido - verifique se o arquivo da sua classe tem a extensão .java
fonte