Eu sei que você pode executar todos os testes em uma determinada classe usando:
mvn test -Dtest=classname
Mas eu quero executar um método individual e -Dtest = classname.methodname parece não funcionar.
Eu sei que você pode executar todos os testes em uma determinada classe usando:
mvn test -Dtest=classname
Mas eu quero executar um método individual e -Dtest = classname.methodname parece não funcionar.
Respostas:
Para executar um único método de teste no Maven, você precisa fornecer o comando como:
mvn test -Dtest=TestCircle#xyz test
onde TestCircle
é o nome da classe de teste e xyz
é o método de teste.
Caracteres curinga também funcionam; no nome do método e no nome da classe.
Se você estiver testando em um projeto de vários módulos, especifique o módulo em que o teste está -pl <module-name>
.
Para testes de integração, use a it.test=...
opção em vez de test=...
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
-pl <module-name>
.
-DfailIfNoTests=false
para pular projetos sem teste. No Tests Were Executed
acontece quando você tenta executar o teste do projeto raiz e há módulos sem testes.
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Observe que "-DTest" começa com MAIÚSCULAS 'T'.
Há um problema com o surefire 2.12. Foi o que aconteceu comigo ao mudar o maven-surefire-plugin de 2.12 para 2.11:
mvn test -Dtest=DesignRulesTest
Resultado:
[ERRO] Falha ao executar a meta org.apache.maven.plugins: maven-surefire-plugin: 2.12 : test (teste padrão) no projeto pmd: nenhum teste foi executado!
mvn test -Dtest=DesignRulesTest
Resultado: [INFO] --- maven-surefire-plugin: 2.11 : test (padrão-teste) @ pmd --- ... Executando net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Testes executados: 5 , Falhas: 0, erros: 0, ignorados: 4, tempo decorrido: 4.009 seg
@Category(IntegrationTest.class)
, use -Dit.test=ClassName
, caso contrário, você ficará No tests were executed!
atualizado com as versões mais recentes do plugin.
O que faço com meus casos de teste TestNG (desculpe, o JUnit não suporta isso) é que posso atribuir um grupo ao teste que quero executar
@Test(groups="broken")
E então simplesmente execute 'mvn -Dgroups = broken'.
Executando um conjunto de métodos em uma única classe de teste Com a versão 2.7.3, você pode executar apenas n testes em uma única classe de teste.
NOTA: é suportado para junho 4.xe TestNG.
Você deve usar a seguinte sintaxe
mvn -Dtest=TestCircle#mytest test
Você também pode usar padrões
mvn -Dtest=TestCircle#test* test
A partir do surefire 2.12.1, você pode selecionar vários métodos (apenas o JUnit4X no momento, os patches são bem-vindos)
mvn -Dtest=TestCircle#testOne+testTwo test
Verifique este link sobre testes únicos
Você pode executar classes e métodos específicos de teste usando a seguinte sintaxe:
pacote completo: mvn test -Dtest = "com.oracle.tests. **"
todo o método em uma classe: mvn test -Dtest = CLASS_NAME1
método único da classe única: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1
método múltiplo de várias classes: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2
Este comando funciona !!
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Observe que "-DTest" começa com MAIÚSCULAS 'T'.
O parâmetro de teste mencionado por tobrien permite especificar um método usando um # antes do nome do método. Isso deve funcionar para JUnit e TestNG. Eu nunca tentei, basta lê-lo na página do Surefire Plugin :
Especifique este parâmetro para executar testes individuais pelo nome do arquivo, substituindo os parâmetros de inclusão / exclusão. Cada padrão que você especificar aqui será usado para criar um padrão de inclusão formatado como ** / $ {test} .java, para que você possa digitar "-Dtest = MyTest" para executar um único teste chamado "foo / MyTest.java". Este parâmetro substitui os parâmetros de inclusão / exclusão e o parâmetro TestNG suiteXmlFiles. desde 2.7.3 Você pode executar um número limitado de métodos no teste adicionando #myMethod ou # my * ethod. Tipo Si "-Dtest = MyTest # myMethod" suportado para junho 4.xe testNg
Novas versões do JUnit contêm o corredor Categorias: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
Mas o procedimento de liberação do JUnit não é baseado em maven, portanto, os usuários maven precisam colocá-lo manualmente em seus repositórios.
A partir da versão do plugin surefire 2.22.1 (possivelmente anterior), você pode executar o teste único usando a propriedade testnames ao usar o testng.xml
Dado um testng.xml a seguir
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="all-tests">
<classes>
<class name="server.Atest"/>
<class name="server.Btest"/>
<class name="server.Ctest"/>
</classes>
</test>
<test name="run-A-test">
<classes>
<class name="server.Atest"/>
</classes>
</test>
<test name="run-B-test">
<classes>
<class name="server.Btest"/>
</classes>
</test>
<test name="run-C-test">
<classes>
<class name="server.Ctest"/>
</classes>
</test>
</suite>
com o 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
[...]
<properties>
<selectedTests>all-tests</selectedTests>
</properties>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<suiteXmlFiles>
<file>src/test/resources/testng.xml</file>
</suiteXmlFiles>
<properties>
<property>
<name>testnames</name>
<value>${selectedTests}</value>
</property>
</properties>
</configuration>
</plugin>
</plugins>
[...]
</project>
Na linha de comando
mvn clean test -DselectedTests=run-B-test
Leitura adicional - plugin Maven surefire usando testng
Você pode executar uma única classe de teste, mas não um único método dentro de uma classe de teste. Você usa o nome simples da classe e não o nome completo da classe. Portanto, se você tiver um teste em "org.sonatype.test.MyTest" e esse for o único teste que você deseja executar, sua linha de comando ficará assim:
mvn test -Dtest=MyTest
Que eu saiba, o plugin surefire não fornece nenhuma maneira de fazer isso. Mas fique à vontade para abrir um problema :)
mvn test -Dtest=classname
sintaxe.