You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Tibor Digana (JIRA)" <ji...@apache.org> on 2019/07/12 13:59:00 UTC

[jira] [Commented] (SUREFIRE-1676) surefire-junit47 is not running JUnit4 tests

    [ https://issues.apache.org/jira/browse/SUREFIRE-1676?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16883834#comment-16883834 ] 

Tibor Digana commented on SUREFIRE-1676:
----------------------------------------

[~bobanahalf]
Try to use singular {{CopyAccountTest.java}}
Do not use star in filter. Use dot star .* but this is not necessary in your case.

> surefire-junit47 is not running JUnit4 tests
> --------------------------------------------
>
>                 Key: SUREFIRE-1676
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1676
>             Project: Maven Surefire
>          Issue Type: Bug
>          Components: Maven Surefire Plugin
>    Affects Versions: 3.0.0-M3
>         Environment: Windows 10 and Centos 7 behave the same.
> java 1.8.161
>            Reporter: Bobby Erwin
>            Priority: Major
>         Attachments: mvn -X output2.txt, mvn-dependency-tree.log
>
>
> In a maven project with lots of JUnit 4 tests, surefire-junit47 is not executing the tests.
> There are no testng tests in this project, and there is no testng in the pom. But this project has a dependency on another project that does have testng in the pom.  You can see it import testng in the mvn -X output, attached.  
> With testng on the classpath, surefire tries to execute tests through testng. So we're configuring our test execution based on this page: https://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html
> For reference sake, here is the documentation I'm working from:[https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html]
> Curiously enough, it appears to find the test classes, but doesn't execute the methods.  That is, if processes all the static fields and @Parameterized methods, but it doesn't execute any @Test methods.
> Here are a couple of pom configurations that show the problem.
> Given this test class organization:
> {code:java}
> - src/main/test/
>    - com.mycomp.qc.core.account
>      - CopyAccountTests.java
>      - CreateAccountTests.java
>      - DeleteAccountTests.java
>      - ListAccountTests.java
>      - ReadAccountTests.java
>      - UpdateAccountTests.java
>    - com.mycomp.qc.core.product
>      - CopyProductTests.java
>      - CreateProductTests.java
>      - DeleteProductTests.java
>      - ListProductTests.java
>      - ReadProductTests.java
>      - UpdateProductTests.java
>    - ..... and 300 more packages .....{code}
>  
> And given this test class structure:
> {code:java}
> package com.mycomp.qc.core.account;
> import org.junit.Assert;
> import org.junit.Test;
> .... and more ....
> public class CopyAccountTests {
>     @Test
>     public void copyAccount1() {
>         Assert.assertTrue("pass", true);
>     }
>     @Test
>     public void copyAccount2() {
>         Assert.assertTrue("fail", false);
>     }
> .... and more ....
> }{code}
>  
> *pom config 1: Specifically include Account tests, by pattern*
> Runs all the Account tests, just as the documentation indicates.
> {code:xml}
> <plugin>
>     <groupId>org.apache.maven.plugins</groupId>
>     <artifactId>maven-surefire-plugin</artifactId>
>     <version>${surefire.version}</version>
>     <dependencies>
>         <dependency>
>             <groupId>org.apache.maven.surefire</groupId>
>             <artifactId>surefire-junit47</artifactId>
>             <version>${surefire.version}</version>
>         </dependency>
>     </dependencies>
>     <configuration>
>         <testFailureIgnore>true</testFailureIgnore>
>         <includes>
>             <include>*Account*</include>
>         </includes>
>         <threadCount>1</threadCount>
>     </configuration>
>     <executions>
>         <execution>
>             <id>default-test</id>
>             <phase>test</phase>
>             <goals>
>                 <goal>test</goal>
>             </goals>
>         </execution>
>     </executions>
> </plugin>
> {code}
> *pom config 2: Specifically include Account tests, by pattern*
> Runs all the Account and Product tests, just as the documentation indicates.
> {code:xml}
> <plugin>
>     <groupId>org.apache.maven.plugins</groupId>
>     <artifactId>maven-surefire-plugin</artifactId>
>     <version>${surefire.version}</version>
>     <dependencies>
>         <dependency>
>             <groupId>org.apache.maven.surefire</groupId>
>             <artifactId>surefire-junit47</artifactId>
>             <version>${surefire.version}</version>
>         </dependency>
>     </dependencies>
>     <configuration>
>         <testFailureIgnore>true</testFailureIgnore>
>         <includes>
>             <include>*Account*</include>
>             <include>*Product*</include>
>         </includes>
>         <threadCount>1</threadCount>
>     </configuration>
>     <executions>
>         <execution>
>             <id>default-test</id>
>             <phase>test</phase>
>             <goals>
>                 <goal>test</goal>
>             </goals>
>         </execution>
>     </executions>
> </plugin>
> {code}
> *pom config 3: Include all tests, based on default surefire*
> Finds and initializes test classes, but does not execute any @Test methods.
> {code:xml}
> <plugin>
>     <groupId>org.apache.maven.plugins</groupId>
>     <artifactId>maven-surefire-plugin</artifactId>
>     <version>${surefire.version}</version>
>     <dependencies>
>         <dependency>
>             <groupId>org.apache.maven.surefire</groupId>
>             <artifactId>surefire-junit47</artifactId>
>             <version>${surefire.version}</version>
>         </dependency>
>     </dependencies>
>     <configuration>
>         <testFailureIgnore>true</testFailureIgnore>
>         <threadCount>1</threadCount>
>     </configuration>
>     <executions>
>         <execution>
>             <id>default-test</id>
>             <phase>test</phase>
>             <goals>
>                 <goal>test</goal>
>             </goals>
>         </execution>
>     </executions>
> </plugin>
> {code}
> *pom config 4: Include all tests, by pattern*
> Finds and initializes test classes, but does not execute any @Test methods.
> {code:xml}
> <plugin>
>     <groupId>org.apache.maven.plugins</groupId>
>     <artifactId>maven-surefire-plugin</artifactId>
>     <version>${surefire.version}</version>
>     <dependencies>
>         <dependency>
>             <groupId>org.apache.maven.surefire</groupId>
>             <artifactId>surefire-junit47</artifactId>
>             <version>${surefire.version}</version>
>         </dependency>
>     </dependencies>
>     <configuration>
>         <testFailureIgnore>true</testFailureIgnore>
>         <includes>
>             <include>*Test*</include>
>         </includes>
>         <threadCount>1</threadCount>
>     </configuration>
>     <executions>
>         <execution>
>             <id>default-test</id>
>             <phase>test</phase>
>             <goals>
>                 <goal>test</goal>
>             </goals>
>         </execution>
>     </executions>
> </plugin>
> {code}
> *What I've tried:*
> # Obviously, from the examples, I've tried different include patterns in the pom. See the results outlined above.
> # Configured a new project, with all the same imports and just a few small tests. All the include patterns above behaved as outlined in the documentation.
> # Switched the surefire provider to surefire-junit4. This, in fact, executed all tests, but we ran into other problems.
> # Ran mvn -X, mainly to look for testng problems, based on this answer: Surefire is not picking up Junit 4 tests.
> # mvn -X showed that the default maven-resources-plugin pulls in junit 3.8.x, which the doc says might cause problems. Updated resources to 3.1.0, but it didn't fix my problem.
> *mvn -X output*
> attached



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)