Cuando decimos mvn test, forma usual es que maven buscará las pruebas presentes en src/test/java carpeta. Pero tengo mis pruebas en algunos carpeta diferente, a saber: src/integración-test/java. ¿Cómo puedo ejecutar las pruebas presentes en esta carpeta a través de la línea de comandos?

Gracias de antemano,

Manoj.

  • Me pregunto qué solución trabajado para usted.
InformationsquelleAutor user2649233 | 2013-05-28

2 Comentarios

  1. 28

    Primera que no se debería correr los test de integración a través de la prueba ciclo de vida, causa
    pre-integración-prueba, la integración de la prueba y post-integración-prueba ciclo de vida fase de existir. Aparte de que para las pruebas de integración el maven-a prueba de fallos-plugin es responsable.

    Hay varias opciones para manejar sus situaciones. En primer lugar usted debe seguir las convenciones de nomenclatura para las pruebas de integración

    <includes>
     <include>**/IT*.java</include>
     <include>**/*IT.java</include>
     <include>**/*ITCase.java</include>
    </includes>

    que significa colocar las pruebas de integración en la carpeta predeterminada src/test/java. Si usted tiene un multi-módulo de construir sería el mejor de tener un módulo independiente que contiene la integración de las pruebas sólo o usted puede ir a la ruta de acceso se decidió utilizar una carpeta aparte (que no es la mejor):

    Primer lugar usted necesita para agregar la carpeta mediante el buildhelper-maven-plugin para conseguir esas pruebas de integración se compilan como este:

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.9.1</version>
        <executions>
          <execution>
            <id>add-test-source</id>
            <phase>process-resources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/integration-test/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>

    y tiene a la configuración de maven-a prueba de fallos-plugin como este:

    <project>
      [...]
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.14.1</version>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      [...]
    </project>

    Después de haber configurado puede ejecutar las pruebas de integración a través de:

    mvn verify
    • solo me pregunto, si no hay nada que ocurra en la post-integración de la prueba, sería igual de válido para el uso mvn integration-test ?
    • Sí que funciona, pero yo sugeriría usar siempre mvn verify que es después de la post-integración y se asegura de que se ejecute post-fase de integración.
  2. 16

    @khmarbaise es de la derecha con su recomendación (+1 por que) pero quiero responder a tu pregunta sin especular acerca de las razones por las que la fuente de prueba se encuentra en algún otro lugar.

    Si las pruebas se encuentra en otro directorio que el estándar de src/test/java directorio, la solución más sencilla es cambiar el valor predeterminado de la testSourceDirectory parámetro de configuración que se define en el Super POM.

    por ejemplo, para src/foobar/java uso

    <build>
      <testSourceDirectory>src/foobar/java</testSourceDirectory>
    </build>

    entonces usted puede simplemente ejecutar mvn test para ejecutar las pruebas.


    Más compleja solución…

    Si usted no desea cambiar el pom.xml la configuración se puede especificar el testSourceDirectory parámetro en la línea de comando como este:

    mvn -DtestSourceDirectory=src/foobar/java clean test

    Pero asegúrese de que sus fuentes son compilados. De lo contrario no será encontrado y ejecutado. En el ejemplo anterior, los orígenes de prueba no se colocan en una ubicación en la que se compila de forma predeterminada, así que, no obstante, para cambiar el pom y añadir el directorio a la lista de orígenes de prueba mediante el uso de la buildhelper plugin:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.8</version>
        <executions>
            <execution>
                <id>add-test-source</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-test-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>src/foobar/java</source>
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>

    Si no desea cambiar la configuración de valor predeterminado en el pom y no desea pasar el nuevo directorio en la línea de comandos tienes que configurar la ruta de acceso en el maven-buildhelper-plugin maven-segura-el plugin en su pom.xml como este:

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>add-test-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>src/foobar/java</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.14.1</version>
                <configuration>
                    <testSourceDirectory>src/foobar/java</testSourceDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

    Ahora de nuevo el simple uso de mvn test va a ejecutar la prueba de la no ubicación estándar.

    • Como ya se mencionó en la pregunta de lo que estamos hablando acerca de las pruebas de integración y no sobre las pruebas de unidad para cambiar la configuración de maven-segura-plugin, que es el responsable de la unidad de pruebas es el camino equivocado. Mejor uso de maven-a prueba de fallos-plugin que está destinado para las pruebas de integración. Aparte de que en base a su cambio sugerido la integración de pruebas en funcionamiento durante el ensayo de ciclo de vida que está en contra de las convenciones de Maven.
    • Como ya he señalado, sigo tu recomendación y le dio un +1. Pero el título de la pregunta es Cómo ejecutar UnitTests y el único indicio de prueba de integración es el nombre del directorio en el que se utiliza para el código de prueba (no puedo encontrar un lugar donde @K S MANOJ señala que se está ejecutando pruebas de integración, y que él habla acerca de la seguridad del plugin). Así que creo que me dio una razonable respuesta a la simple pregunta de cómo ejecutar pruebas en una carpeta diferente de la predeterminada (Pero tengo mis pruebas en algunos carpeta diferente…).
    • Por la forma en que mi solución no afecta a la ejecución de la infalible o a prueba de fallos plugin (por ejemplo, correr en diferentes ciclo de vida). Cualquiera que sea la convención de nomenclatura @K S MANOJ elegido o lo que sea de configuración del plugin que él hizo (no sabemos…), cambiar la carpeta predeterminada para la prueba de fuentes no va a cambiar cualquiera de estos ajustes y la construcción se ejecute como se ha configurado por @K S MANOJ.

Dejar respuesta

Please enter your comment!
Please enter your name here