Como executar casos de teste JUnit na linha de comando


333

Eu gostaria de executar casos de teste JUnit na linha de comando. Como posso fazer isso?


pergunta semelhante ao android junit: stackoverflow.com/q/11144466/611007
n611x007

Documentos do Android: executando testes em um dispositivo ou emulador (na linha de comando). ( via andreea.sandu)
n611x007


javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.javatrabalhou para mim. Observe o ponto final - é importante!
parsecer 28/01

Respostas:


274

Para o JUnit 5.x , é:

java -jar junit-platform-console-standalone-<version>.jar <Options>

Encontre um breve resumo em https://stackoverflow.com/a/52373592/1431016 e detalhes completos em https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher

Para o JUnit 4.X , é realmente:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Mas se você estiver usando o JUnit 3.X, observe que o nome da classe é diferente:

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

Pode ser necessário adicionar mais JARs ou diretórios com seus arquivos de classe ao caminho de classe e separá-lo com ponto e vírgula (Windows) ou dois pontos (UNIX / Linux). Depende do seu ambiente.

Editar: adicionei o diretório atual como exemplo. Depende do seu ambiente e de como você constrói seu aplicativo (pode ser bin / ou build / ou mesmo my_application.jar etc). Nota O Java 6+ suporta globs no caminho de classe, você pode:

java -cp lib/*.jar:/usr/share/java/junit.jar ...

Espero que ajude. Escreva testes! :-)


@Izap Alguma idéia para determinar programaticamente se um teste está usando JUnit4 ou JUnit3?
Goaler444

2
Class.forName eu acho. Faz anos que programava em Java pela última vez ...
lzap

e se você estiver usando android?
N611x007

1
A documentação para o argumento "-cp" (ou seja, o CLASSPATH) está aqui (Java 7, Unix) e aqui (Tutorial) e aqui (Java 8, Unix) e aqui (Java 8, Windows) . Aparentemente, os curingas no caminho de classe agora são suportados.
David Tonhofer 8/08/2015

1
Voto negativo. Para o JUnit 4.x, não está certo. Suas instruções indicam "Não foi possível encontrar a classe: [nome da classe de teste]" Mesmo quando [nome da classe de teste] está no caminho de classe.
Philip Rego

117

Maneira Maven

Se você usa o Maven, pode executar o seguinte comando para executar todos os seus casos de teste:

mvn clean test

Ou você pode executar um teste específico como abaixo

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod

Se você deseja ver o rastreamento da pilha (se houver) no console, em vez dos arquivos de relatório na pasta target \ surefire-reports, configure a propriedade do usuário surefire.useFile como false. Por exemplo:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false

Maneira Gradle

Se você usa Gradle, pode executar o seguinte comando para executar todos os seus casos de teste:

gradle test

Ou você pode executar um teste específico como abaixo

gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

Se desejar obter mais informações, considere opções como --stacktrace, ou --info ou --debug.

Por exemplo, quando você executa o Gradle com o nível de registro de informações --info, ele mostra o resultado de cada teste enquanto eles estão em execução. Se houver alguma exceção, ele mostrará o rastreamento da pilha, indicando qual é o problema.

gradle test --info

Se você deseja ver os resultados gerais do teste, pode abrir o relatório no navegador, por exemplo (Abra-o usando o Google Chrome no Ubuntu):

google-chrome build/reports/tests/index.html

Maneira da formiga

Depois de configurar o arquivo de construção Ant, build.xml, você pode executar seus casos de teste JUnit na linha de comando, como abaixo:

ant -f build.xml <Your JUnit test target name>

Você pode seguir o link abaixo para ler mais sobre como configurar testes JUnit no arquivo de construção do Ant: https://ant.apache.org/manual/Tasks/junit.html

Maneira normal

Se você não usar o Maven, Gradle ou Ant, poderá seguir o seguinte caminho:

Primeiro de tudo, você precisa compilar seus casos de teste. Por exemplo (no Linux):

javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java

Em seguida, execute seus casos de teste. Por exemplo:

java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName

1
Gosto que esta resposta tenha exemplos para várias tecnologias, parabéns!
Josie Thompson

e os testes de groovy usando a última abordagem?
Midori

1
Bem merecido distintivo dourado;)
Eric Duminil

Obrigado pela versão para gradle! Parabéns!
ady 22/01

52

A resposta que o @lzap deu é uma boa solução. No entanto, gostaria de acrescentar que você deve adicionar. para o caminho da classe, para que seu diretório atual não seja deixado de fora, resultando em suas próprias classes. Isso aconteceu comigo em algumas plataformas. Portanto, uma versão atualizada para o JUnit 4.x seria:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

1
isso deveria ser um ponto e vírgula?
panny

14
@panny é um ponto e vírgula no Windows. No ambiente n * nix (pelo menos OSX e todas as distribuições Linux que eu usei), você usa dois pontos.
Rand_acs

1
@rand_acs o nome da classe de teste precisa ser o nome completo da classe?
Goaler444

1
@ Goaler444 Sim, eu sempre uso o nome completo, com todos os espaços para nome especificados.
Rand_acs

22

Verifique se JUnit.jar está no seu caminho de classe e, em seguida, chame o corredor da linha de comandos no console

java org.junit.runner.JUnitCore [nome da classe de teste]

Referência: junit FAQ


4
você também precisa configurar o restante do caminho de classe do seu projeto.
Thilo

Isso fornece "Não foi possível encontrar a classe: [nome da classe de teste]", mesmo quando [nome da classe de teste] está no caminho de classe.
Philip Rego

19

Com o JUnit 4.12, o seguinte não funcionou para mim:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Aparentemente , a partir do JUnit 4.11 em diante, você também deve incluir hamcrest-core.jarno seu caminho de classe:

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]

Teve o mesmo problema com o JUnit 4.12. Veio com uma solução semelhante, mas não funcionou para mim, falhando ao carregar o JUnitCore. Eu basicamente mudei para o JUnit 4.8.2, pois não requer a inclusão do hamcrest-core.jar no caminho de classe.
Vladimir Nazarenko

Confirmado que isso deve ser feito com o JUnit 4.12. +1.
rayryeng

Isso funcionou para mim:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian

11

No windows é

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [nome da classe de teste sem extensão .class]

por exemplo: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...e assim por diante, se houver mais de uma classe de teste.

-cp representa o caminho da classe e o ponto (.) representa o caminho de classe existente enquanto o ponto-e-vírgula (;) anexa o jar fornecido ao caminho de classe, como no exemplo acima, junit-4.8.2 agora está disponível no caminho de classe para executar a classe JUnitCore que aqui usamos para executar nossas classes de teste.

A instrução da linha de comando acima ajuda a executar testes junit (versão 4+) no prompt de comando (ou seja, MSDos).

Nota: O JUnitCore é uma fachada para executar testes de junit, essa fachada está incluída em mais de 4 versões do junit.


Por favor, explique sua resposta em muito breve.
Mohit Jain 15/05

Não pedi para você manter sua resposta breve. Pedi para adicionar alguma explicação (pelo menos uma breve explicação). É uma boa prática explicar como sua resposta funciona. Os leitores podem entender, assim como fazer votos positivos.
Mohit Jain

então se eu tivesse um jar de teste suplementar e o jar vanilla junit, eu teria que ter os dois no comando java -cp para que algo realmente funcionasse? Existe uma maneira de contornar tudo isso em uma linha de comando para que eu não precise digitar tantas coisas?
Ungeheuer

5

Na verdade, você também pode tornar o teste Junit um jar executável e chamar o jar executável como java -jar


2
No Eclipse, clique com o botão direito do mouse no seu projeto JUnit -> Clique em Exportar -> Escolha Java-> Arquivo Jar
Executável

4

Se o seu projeto for baseado em Maven, você poderá executar todos os métodos de teste da classe de teste CustomTest, que pertence ao módulo 'my-module', usando o seguinte comando:

mvn clean test -pl :my-module -Dtest=CustomTest

Ou execute apenas 1 método de teste myMethod da classe de teste CustomTest usando o próximo comando:

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

Para essa capacidade, você precisa do Maven Surefire Plugin v.2.7.3 + e Junit 4. Mais detalhes estão aqui: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html


4

Pessoalmente, eu usaria o corredor JUnit Maven surefire para fazer isso.



-1

Se você projetar com base em formigas, poderá fazer algo assim no console:

ant test

Se isso não funcionar, mas o seu projeto ainda for baseado em formigas, você poderá executar ant -ppara listar os principais destinos do projeto.


2
o Q tem nada a ver com formiga
accuya

3
Por isso eu disse "se o seu projeto é baseado em formigas". Observe também que o OP pode não saber sobre formiga.
cherouvim

Eu tinha esse dillema, os arquivos de teste de unidade não estavam na pasta marcada como origem pelo eclipse. Esse projeto usa o ant para construir, essa era a maneira correta de executar esses testes JUnit.
Andrzej Rehmann 26/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.