2009-05-07 23 views
42

Me gustaría omitir solo una prueba al iniciar mvn install.¿Hay alguna forma de saltear solo una prueba en maven?

¿Hay alguna manera de hacerlo?

+0

http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html – Vadzim

+4

Si está utilizando el plugin failsafe: 'mvn clean install -Dit.test = \! TestToSkip. *' –

Respuesta

18

Con junit 4, agrego una anotación @Ignore cuando quiero hacer eso. Esto funcionaría para ti, a menos que quieras ignorar la prueba solo a veces, o solo ignorarla cuando la compilación se ejecute desde maven. Si este es el caso, entonces preguntaría "¿Por qué?"

pruebas deben ser coherentes, que deben ser portátil, y ellos deben pasar siempre. Si una prueba específica es problemática, consideraría volver a escribirla, eliminarla por completo o moverla a una suite o proyecto de prueba diferente.

+5

El caso de uso es que alguien en mi equipo está actualmente arreglando una prueba y quiero lanzar todas las otras pruebas pero no esta hasta que esté funcionando nuevamente . Así que tienes razón, debería desactivarlo por código temporal. – paulgreg

+0

Esto también funciona a nivel de clase. Tengo una prueba base y la configuración de pom no se puede modificar (está en un pom padre compartido), por lo que Maven falla mis pruebas porque dice "sin pruebas" en la clase abstracta. Esta es una gran solución. – ashes999

+1

Esto significa que debe editar/comprometerse para revertir el cambio. Lo mismo para la próxima solución: – jasonnerothin

4

Creo que esto debería funcionar si se utiliza este comando:

mvn archetype:create -DgroupId=test -DartifactId=test 

(para el cambio de prueba pom.xml y de clase de prueba a la siguiente y use instalar MVN)

pom.xml

<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>test</groupId> 
<artifactId>test</artifactId> 
<packaging>jar</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>test</name> 
<url>http://maven.apache.org</url> 
<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> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <excludes> 
        <exclude> 
         test/AppTest.java 
       </exclude> 
       </excludes> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.5</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

prueba de clase:

package test; 
import org.junit.Test; 
import static org.junit.Assert.fail; 
public class AppTest 
{ 
    @Test 
    public void test_it() { 
     fail("not implemented"); 
    } 
} 
5

Tenga una mirada en this solution, utilizando @Category anotaciones

public class AccountTest { 

    @Test 
    @Category(IntegrationTests.class) 
    public void thisTestWillTakeSomeTime() { 
     ... 
    } 

    @Test 
    @Category(IntegrationTests.class) 
    public void thisTestWillTakeEvenLonger() { 
     ... 
    } 

    @Test 
    public void thisOneIsRealFast() { 
     ... 
    } 
} 

que luego se ejecuta utilizando un conjunto de pruebas:

@RunWith(Categories.class) 
@IncludeCategory(SlowTests.class) 
@SuiteClasses({ AccountTest.class, ClientTest.class }) 
public class LongRunningTestSuite {} 
+0

¿Es posible especificar la categoría en la línea de comandos de maven/sin tocar el código? –

4

Es normal que las pruebas de integración deben ser excluidos, pero las pruebas unitarias necesita ser incluido. Para lograr esto, sugiero nombrar todas las pruebas de integración con una prueba de integración de postfix (por ejemplo, AbcIntegrationTest.java).

y luego en su construcción experta en poner lo siguiente:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <excludes> 
        <exclude>**/*IntegrationTest.java</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 

Cuando se construye con este todas las pruebas de integración Wil ser excluidos, pero se ejecutan todas las demás pruebas (prueba de la unidad, por ejemplo). :-) perfecta

Para obtener más información sobre exclusing e incluyendo pruebas durante la prueba, leer

http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

PS Para exlude una sola prueba sólo hay que nombrar explícitamente en la lista de exclusión. Fácil.

26

Puede especificar un patrón de exclusión en la opción -Dtest precediéndolo con un ! (signo de exclamación). Por ejemplo,

mvn -Dtest=\!FlakyTest* install 

encontró en here y verificó estar funcionando. P.ej., Yo era capaz de saltar this prueba Jenkins escamosa usando:

mvn -Dtest=\!CronTabTest* package 
+1

Esa característica se implementó en 2.19, consulte [la documentación] (http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html#Multiple_Formats_in_One). – rdvdijk

+0

¿Hay alguna forma de combinar incluir y excluir? P.ej. Es posible que desee ejecutar Cron * Test, excepto CronFlakyTest. Intenté 'mvn -Dtest =" \! CronFlakyTest, Cron * Test "install' pero aún se ejecuta la prueba escamosa –

Cuestiones relacionadas