Sé que puedes ejecutar todas las pruebas en una clase determinada usando:
mvn test -Dtest=classname
Pero quiero ejecutar un método individual y -Dtest = classname.methodname no parece funcionar.
Sé que puedes ejecutar todas las pruebas en una clase determinada usando:
mvn test -Dtest=classname
Pero quiero ejecutar un método individual y -Dtest = classname.methodname no parece funcionar.
Respuestas:
Para ejecutar un único método de prueba en Maven, debe proporcionar el comando como:
mvn test -Dtest=TestCircle#xyz test
donde TestCircle
es el nombre de la clase de prueba y xyz
es el método de prueba.
Los caracteres comodín también funcionan; tanto en el nombre del método como en el nombre de la clase.
Si está probando en un proyecto de varios módulos, especifique el módulo en el que se encuentra la prueba -pl <module-name>
.
Para las pruebas de integración, use la it.test=...
opción en lugar de test=...
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
-pl <module-name>
.
-DfailIfNoTests=false
para omitir proyectos sin prueba. No Tests Were Executed
sucede cuando intenta ejecutar la prueba desde el proyecto raíz y hay módulos sin pruebas en absoluto.
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Tenga en cuenta que "-DTest" comienza con MAYÚSCULAS 'T'.
Hay un problema con surefire 2.12. Esto es lo que me pasa al cambiar el complemento maven-surefire de 2.12 a 2.11:
mvn test -Dtest=DesignRulesTest
Resultado:
[ERROR] Error al ejecutar el objetivo org.apache.maven.plugins: maven-surefire-plugin: 2.12 : prueba (prueba predeterminada) en el proyecto pmd: ¡ No se ejecutaron pruebas!
mvn test -Dtest=DesignRulesTest
Resultado: [INFO] --- maven-surefire-plugin: 2.11 : test (default-test) @ pmd --- ... Ejecutando net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Tests run: 5 , Fallos: 0, Errores: 0, Saltado: 4, Tiempo transcurrido: 4.009 segundos
@Category(IntegrationTest.class)
, use -Dit.test=ClassName
, de lo contrario obtendrá No tests were executed!
incluso con las últimas versiones de complementos.
Lo que hago con mi TestNG, (lo siento, JUnit no lo admite) es que puedo asignar un grupo a la prueba que quiero ejecutar
@Test(groups="broken")
Y luego simplemente ejecute 'mvn -Dgroups = broken'.
Ejecución de un conjunto de métodos en una sola clase de prueba Con la versión 2.7.3, puede ejecutar solo n pruebas en una sola clase de prueba.
NOTA: es compatible con junit 4.xy TestNG.
Debe usar la siguiente sintaxis
mvn -Dtest=TestCircle#mytest test
Puedes usar patrones también
mvn -Dtest=TestCircle#test* test
A partir de surefire 2.12.1, puede seleccionar varios métodos (JUnit4X solo en este momento, los parches son bienvenidos)
mvn -Dtest=TestCircle#testOne+testTwo test
Consulte este enlace sobre pruebas individuales
Puede ejecutar clases y métodos de prueba específicos utilizando la siguiente sintaxis:
paquete completo: mvn test -Dtest = "com.oracle.tests. **"
Todos los métodos en una clase: mvn test -Dtest = CLASS_NAME1
método único de una sola clase: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1
método múltiple de clase múltiple: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2
Este comando funciona !!
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Tenga en cuenta que "-DTest" comienza con MAYÚSCULAS 'T'.
El parámetro de prueba mencionado por tobrien le permite especificar un método usando un # antes del nombre del método. Esto debería funcionar para JUnit y TestNG. Nunca lo he probado, solo léelo en la página del plugin Surefire :
Especifique este parámetro para ejecutar pruebas individuales por nombre de archivo, anulando los parámetros de inclusión / exclusión. Cada patrón que especifique aquí se usará para crear un patrón de inclusión formateado como ** / $ {test} .java, por lo que puede escribir "-Dtest = MyTest" para ejecutar una sola prueba llamada "foo / MyTest.java". Este parámetro anula los parámetros de inclusión / exclusión y el parámetro TestNG suiteXmlFiles. desde 2.7.3 Puede ejecutar un número limitado de métodos en la prueba agregando #myMethod o # my * ethod. Si escribe "-Dtest = MyTest # myMethod" compatible con junit 4.xy testNg
Las nuevas versiones de JUnit contienen el corredor de Categorías: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
Pero el procedimiento de lanzamiento de JUnit no está basado en Maven, por lo que los usuarios de Maven deben ponerlo manualmente en sus repositorios.
A partir de la versión 2.22.1 del plugin surefire (posiblemente anterior), puede ejecutar una sola prueba usando la propiedad testnames cuando use testng.xml
Dado un siguiente testng.xml
<?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>
con el 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>
Desde la línea de comando
mvn clean test -DselectedTests=run-B-test
Lecturas adicionales: plugin Maven surefire usando testng
Puede ejecutar una sola clase de prueba, pero no un solo método dentro de una clase de prueba. Utiliza el nombre simple de la clase, no el nombre completo de la clase. Entonces, si tiene una prueba en "org.sonatype.test.MyTest" y esa es la única prueba que desea ejecutar, su línea de comando se vería así:
mvn test -Dtest=MyTest
Que yo sepa, el complemento infalible no proporciona ninguna forma de hacer esto. Pero siéntase libre de abrir un problema :)
mvn test -Dtest=classname
sintaxis.