Maven a prueba de fallas no ejecuta pruebas

I've combed StackOverflow and many other sites, have found many other related posts and have followed all said suggestions, but in the end, failsafe is skipping my tests.

My JUnit test is located here: myModule/src/main/test/java/ClientAccessIT.java

Soy skipping surefire because there are no unit tests in this module:

<!-- POM snippet -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
  <skip>true</skip>
  </configuration>
</plugin>

And I'm trying to run integration tests with a prueba de fallos:

<!-- POM snippet -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <id>run-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Sin embargo, cuando corro mvn verify Veo esto:

[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (run-tests) @ rest-services-test ---

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

I spent the last 4 1/2 hours scouring, any help would be appreciated. The only other thing that may be worth mentioning is that I have Carga setting up and tearing down a Tomcat container. Does anybody see the glaring problem?

preguntado el 05 de mayo de 13 a las 19:05

¿Por qué no es maven-failsafe-plugin running out of the box on the integration-test ¿fase? -

13 Respuestas

Your tests are not in the default test sources directory src/test/java. See:

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

myModule/src/main/test/java/ClientAccessIT.java

debiera ser:

myModule/src/test/java/ClientAccessIT.java

You could also update your pom file (if you really wanted tests to live in main) to include:

<build>
    <testSources>
        <testSource>
            <directory>src/main/test</directory>
        </testSource>
    </testSources>
</build>

contestado el 09 de mayo de 17 a las 18:05

This should be the accepted answer. The given example clearly doesn't work because of this. - Thomas Naskali

Querías decir <testResources> or <testSourceDirectory>? I cannot find element <testSources> - Nom1fan

This has changed. Since failsafe v2.2.: maven.apache.org/surefire/maven-surefire-plugin/… - Ueffes

I had a similar problem. If there aren't any test classes compiled to target/test-classes then check your pom file and ensure that the packaging isn't 'pom'.

Respondido 31 Jul 15, 22:07

What is "packaging isn't pom"? Any hint? - marca la grea

Look in your effective pom.xml for the tag "packaging". Look at this link for a bit more about the packaging tag. maven.apache.org/pom.html. the key is to ensure that the value of that tag is not "pom". - Raymond

Si usas Spring Boot version 2.4 or higher, and your tests still use Unidad 4, remember to put this dependency:

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
</dependency>

Versión 2.4 de spring-boot-starter-test includes only JUnit 5 and removed the vintage engine that provided a TestEngine for running JUnit 3 and 4 based tests.

Without that vintage engine, all JUnit 4 tests are silently ignored.

Respondido 07 Feb 22, 13:02

Thanks neXus for this answer. It saved lot of time, since it was very difficult to find the cause, as no test where executed for me as all of the test where written in Junit4. - Suvojit

For multi-module projects, the child project needs to have the plugin declared as followed,

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
 </plugin>

version inherits from parent pom. Without the above defined, the plugin in parent pom alone will not work.

Respondido 01 ago 16, 20:08

I had to define plugin inside parent's pom (pluginManagement section) and use it on the project's pom (plugins section) - Sergio Gabari

You need to rename your test class.

You can find the names the plugin looks for by default in la documentación, as pointed out by @acdcjunior:

De forma predeterminada, el complemento Failsafe incluirá automáticamente todas las clases de prueba con los siguientes patrones comodín:

  • "**/IT*.java" - includes all of its subdirectories and all java filenames that start with "IT".
  • "**/*IT.java" - includes all of its subdirectories and all java filenames that end with "IT".
  • "**/*ITCase.java" - includes all of its subdirectories and all java filenames that end with "ITCase".

contestado el 05 de mayo de 13 a las 21:05

That does not seem to be true: maven.apache.org/surefire/maven-failsafe-plugin/examples/… - it says the default patterns are **/IT*.java, **/*IT.java, **/*ITCase.java. - acdcjunior

@acdcjunior beat me to it; here's a direct link to the relevant documentation page: maven.apache.org/surefire/maven-failsafe-plugin/… - kryger

"**/*IT.java" - includes all of its subdirectories and all java filenames that end with "IT". Wouldn't ClientAccessIT.java meet the qualifications of this pattern? - dingalla

The example "ClientAccessIT.java" clearly matches *IT.java. So this answer is just useless and confusing. - Gustave

This answer is wrong and misleading. The correct answer was given by @pro-tester - t0r0X

I was having the same issue and tried a few of the suggested options here. I am developing a Spring Boot application using JUnit 5. Unfortunately, none of my integration tests (located in src/test/java y con el sufijo *TestIT.java) were getting picked up, regardless of the advertising of the plugin to do so. I tried downgrading to 2.18.1 and 2.19.1 and tried both removing the <executions> y <configuration> sections to attempt to use even the plugin's default functionality, but no luck.

I finally changed the version to the latest (as of the time of writing) to 2.22.0, and viola. Here is the configuration I added to the <build><plugins> section of my pom. And even better, I don't need to add executions that define the integration-test y verify goals that you see most people include; failsafe executes these by default. I've included my surefire plugin configuration as well, since I am using it to execute unit tests during the test phase of the maven lifecycle.

Edit: I also had to ad the integration-test y verify executions to the plugin configuration as well.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.0</version><!--$NO-MVN-MAN-VER$-->
</plugin>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.22.0</version><!--$NO-MVN-MAN-VER$ -->
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
     </execution>
  </executions>
</plugin>

And just for good measure, to tell surefire and failsafe to use JUnit 5, I am including this in my <dependencies> sección:

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <scope>test</scope>
</dependency>

Eclipse displays a warning (yellow squiggly underline) under the version tag, hence the inclusion of the <!--$NO-MVN-MAN-VER$ --> error. I'm sure there's a better way to deal with this, but it works for me in this case.

To speed up testing this configuration, and to avoid having to go through todos of the earlier lifecycle phases before test, integration-test orverify phases, I used the following commands to quickly validate:

  • mvn failsafe:integration-test (runs only integration tests)
  • mvn surefire:test (runs only unit tests)
  • (I obviously run the entire lifecycle when it counts)

Espero que esto ayude a alguien. ¡Salud!

Respondido 04 Feb 22, 18:02

For me nothing was working without this junit-jupiter-engine dependency added in tests module. Thanks for the hint! Although I don't fully understand yet how it actually influenced it and made it work... Can anyone explain? When I started these tests by surfire-plugin (in default test phase), then the dependency wasn't needed and everything worked. - siempre

See the comment from Horatiu. He has the right solution, as by the Maven references: <goal>integration-test</goal> and <goal>verify</goal> - tibor17

Interesting. I used to have to downgrade to 2.18.1. Which still works for me. Unless your tests are junit 5 then I have to use M-3.0.x stackoverflow.com/a/70991122/32453 - Rogerdpack

I also had a similar problem but needed the packaging element to be "pom". Make sure your test source files are being compiled and added to the .../target/test-classes folder using the maven-compiler-plugin:

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <executions>
                <execution>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Respondido 17 Feb 16, 12:02

Strangely my packaging was jar but test classes were not compiled. Thanks. - Vitaly Sazanovich

This was my issue also, as soon as I included compiler plugin integration tests started working! - León

My packaging was also jar and I also need to do this - Sergio Gabari

For me it was a missing executions section

            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>

The failsafe with TestNG documentation at https://maven.apache.org/surefire/maven-failsafe-plugin/examples/testng.html had shown a pom without it, and it didn't work.

<plugins>
    [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M3</version>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
      </plugin>
    [...]
</plugins>

Adding the missing executions section shown above solved the problem.

Respondido el 30 de junio de 19 a las 11:06

Of course we do not write all such details in the documenttaion because the specification related to the plugin goals are phase are related to the basic understanding of the Maven and plugin documentation and Maven basics. See the goals maven.apache.org/surefire/maven-failsafe-plugin/…, what defaul phase (acctualy failsafe does not have default phase but surefire has it) and then we expect that the user has a common understanding of these things. I would recommend separating the goal examen de integración y verificar under separate execution id. - tibor17

I'm using java 8, failsafe plugin version 2.22.2 => tests not running problem, to solve this I added next:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-failsafe-plugin</artifactId>
     <version>${surefire.plugin.version}</version>
     <dependencies>
         <dependency>
             <groupId>org.apache.maven.surefire</groupId>
             <artifactId>surefire-junit47</artifactId>
             <version>2.22.2</version>
         </dependency>
    </dependencies>
     <executions>
         <execution>
             <id>integration</id>
             <phase>integration-test</phase>
             <goals>
                 <goal>integration-test</goal>
            </goals>
        </execution>
        <execution>
            <id>verify</id>
            <phase>verify</phase>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
     </executions>
</plugin>

Respondido 02 Jul 20, 04:07

Los objetivos examen de integración y verificar have to be listed in the execution(s) section of the plugin. Otherwise you won't see it running. - tibor17

I added also the execution part. - horatiu

I am highly recommending to use one version ${surefire.plugin.version} and not hardcoded version 2.22.2. - tibor17

I had somewhat similar issue. My Integration tests were not being picked up. My project is a multi module spring boot project. And my mistake was that I added maven-failsafe-plugin in the parent POM. After fiddling around with many options I placed the failsafe-plugin in the module pom where all my integration tests were present which solved my problem.

Respondido el 19 de Septiembre de 18 a las 09:09

Los objetivos examen de integración y verificar have to be listed in the execution(s) section of the plugin. Otherwise you won't see it running. The place: parent or child was not the answer why you made it running. - tibor17

Para mí, surefire:verify did not run any tests. I had to use surefire:integration-test.

respondido 18 mar '20, 14:03

Of course it won't work because seguro does not have the goals verificar y examen de integración, ver la documentación maven.apache.org/surefire/maven-surefire-plugin/… - tibor17

If you want to use these goals, you have to use a prueba de fallos plugin, and the commands will be in this order mvn failsafe: prueba de integración y mvn failsafe:verify, see the goals for failsafe in documentation maven.apache.org/surefire/maven-failsafe-plugin/… - tibor17

Since there are so many pieces that can lead to this problem, I will share how mine was resolved.

There was an active profile in my maven settings file ( .m2/settings.xml ), it had maven.test.skip propiedad establecida en true and that was skipping the tests when I run the tests via maven. It was needed for an old application and I totally forgot about that profile.

</profiles>
   <profile>
      <id>god-damnit-profile</id>
      <properties>
        ...
        <maven.test.skip>true</maven.test.skip>
      </properties>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>god-damnit-profile</activeProfile>
  </activeProfiles>

I commented it out and it works now.

<activeProfiles>
    <!-- <activeProfile>god-damnit-profile</activeProfile> -->     
</activeProfiles>

Respondido el 27 de enero de 21 a las 19:01

Si utiliza JUnit5, don't forget to add the following dependency to your test classpath:

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <scope>test</scope>
    </dependency>

respondido 03 nov., 21:11

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.