标签: maven-surefire-plugin

maven surefire插件可以在直接调用时运行多个测试执行吗?(声纳+詹金斯没有运行所有单元测试)

我有一个使用surefire插件进行单元测试的maven项目.目前测试分为两个执行default-testunitTests,两者都绑定到测试目标,如下所示:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <executions>
      <!-- Test one set of files -->
      <execution>
        <id>default-test</id>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes> ... </includes>
        </configuration>
      </execution>
      <!-- Test a different set of files -->
      <execution>
        <id>unitTests</id>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes> ... </includes>
        </configuration>
      <execution>
    </executions>
  </plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)

这在运行时工作正常mvn test:

$ mvn test
...
[INFO] maven-surefire-plugin:2.13:test (default-test)
...
[INFO] maven-surefire-plugin:2.13:test (unitTests)
Run Code Online (Sandbox Code Playgroud)

我在Jenkins上使用Sonar插件生成代码指标,Jenkins的设置如下:

  • 运行构建操作 mvn clean install -DskipTests
  • 运行Sonar插件作为后构建操作

这意味着Sonar插件运行单元测试,单元测试仅运行一次.当Sonar插件运行时,我看到以下输出:

[INFO] maven-surefire-plugin:213:test (default-cli) 
Run Code Online (Sandbox Code Playgroud)

请注意,只调用default-cli …

unit-testing maven jenkins maven-surefire-plugin sonarqube

7
推荐指数
1
解决办法
2153
查看次数

尽管单元测试失败,Jenkins Maven仍然可以获得成功

我在Jenkins中使用Maven 3.2.3,JUnit 4.12和SureFire 2.18.1.我有一个多模块Maven作业设置与以下Maven选项:

clean install -U -e -P qa -Dci -DskipITs
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的Maven构建时,虽然我的一个JUnit测试失败,但Maven模块本身报告"SUCCESS"(后面的输出)......

Executing Maven:  -B -f /var/lib/jenkins/workspace/subco/subco/pom.xml clean install -U -e -P qa -Dci -DskipITs


…

———————————————————————————
 T E S T S
-------------------------------------------------------
Running org.mainco.subco.user.domain.UserTest
Tests run: 24, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.049 sec <<< FAILURE! - in org.mainco.subco.user.domain.UserTest
testHasRoleNullRoles(org.mainco.subco.user.domain.UserTest)  Time elapsed: 0.006 sec  <<< FAILURE!
java.lang.AssertionError: Failed to indicate we found right role for user.
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at 

…

[INFO] Tests are …
Run Code Online (Sandbox Code Playgroud)

junit maven jenkins maven-surefire-plugin

7
推荐指数
1
解决办法
2855
查看次数

Surefire 重新运行失败的测试不起作用

我想重新运行一个我知道会失败的测试,因为我正在尝试测试 Surefire 参数以重新运行失败的测试。我尝试使用这两个命令运行 Maven 它们都没有按预期工作

-Dsurefire.rerunFailingTestsCount=2 -Dtest=TestThatFails test
Run Code Online (Sandbox Code Playgroud)

-Dsurefire.rerunFailingTestsCount=2 -Dtest=TestThatFails surefire:test
Run Code Online (Sandbox Code Playgroud)

这是其中的一部分 pom.xml

<dependency>
    <groupId>org.apache.maven.surefire</groupId>
    <artifactId>surefire-api</artifactId>
    <version>2.19.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.53.1</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
Run Code Online (Sandbox Code Playgroud)

我原以为 Surefire 会在失败后重新启动测试,但 Maven 只是抛出此错误,我知道如何解决,但我希望重新运行测试。

<dependency>
    <groupId>org.apache.maven.surefire</groupId>
    <artifactId>surefire-api</artifactId>
    <version>2.19.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.53.1</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
Run Code Online (Sandbox Code Playgroud)

java testing surefire maven maven-surefire-plugin

7
推荐指数
3
解决办法
8433
查看次数

单独运行JUnit test*methods*

maven-surefire-plugin能够独立运行所有JUnit测试方法吗?即,是否能够为每个测试方法而不是每个测试类分叉JVM?

已弃用的选项

<forkMode>pertest</forkMode>
Run Code Online (Sandbox Code Playgroud)

和当前

<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
Run Code Online (Sandbox Code Playgroud)

似乎只为每个测试类分叉.

PS:测试方法应该是独立的,因此没有人需要在新的JVM上运行每一个(而不是说它会非常昂贵).但我想知道是否有这样的选择.

java junit maven maven-surefire-plugin

7
推荐指数
1
解决办法
615
查看次数

Java9多模块Maven项目测试依赖项

我有三个模块的多模块Maven项目core,utils以及test-utils

Core具有以下依赖项定义

<dependency>
   <groupId>my.project</groupId>
   <artifactId>utils</artifactId>
</dependency>
<dependency>
   <groupId>my.project</groupId>
   <artifactId>test-utils</artifactId>
   <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

module-info.java为所有三个模块添加了Java 9 定义,它们core看起来像这样:

module my.project.core {
   requires my.project.utils;
}
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚如何让core测试类能够test-utils在测试执行期间看到类.当maven-surefire-plugin尝试测试运行时,我找不到课程.

如果我添加一个requires my.project.testutils;coremodule-info.java:

module my.project.core {
   requires my.project.utils;
   requires my.project.testutils; //test dependency
}
Run Code Online (Sandbox Code Playgroud)

然后在编译时我得到一个错误,my.project.testutils模块无法找到(大概是因为它只是作为测试依赖项引入).

如何在Java 9模块化世界中使用测试依赖项?出于显而易见的原因,我不希望我的主代码引入测试依赖项.我错过了什么吗?

java maven java-platform-module-system maven-surefire-plugin java-9

7
推荐指数
1
解决办法
923
查看次数

使用 Maven Surefire 运行嵌套的 JUnit 5 测试

在迁移我的主项目之前,我试图在我的副项目中使用 JUnit 5 作为试验。我想使用 @Nested 测试使我的测试类更干净。
当我整体运行测试套件时,一切都很好。但是,只要我尝试只运行一个测试,就不会执行 @Nested 测试。

mvn -Dtest=com.mycompany.test.MyTest surefire:test
Run Code Online (Sandbox Code Playgroud)

有没有办法让它运行选定的类和所有@Nested 类?

使用 JUnit 5.1.0,JUnit 平台 1.1.0

<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <dependencies>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-surefire-provider</artifactId>
        <version>${org.junit.platform.version}</version>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${org.junit.version}</version>
      </dependency>
    </dependencies>
  </plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

测试类:

public class MyTest {

  @Test
  public void thisTestExecutes() { }

  @Nested
  public class NestedTests {
    @Test
    public void thisTestDoesnt() { }
  }
}
Run Code Online (Sandbox Code Playgroud)

junit nested maven maven-surefire-plugin junit5

7
推荐指数
1
解决办法
1416
查看次数

如何避免并行运行 Surefire 测试

我这里有一个应用程序,其中单元测试的编写方式无法并行运行。

\n\n

当使用 Maven 运行测试时,其中一些测试会因为这个原因而失败。\n我可以通过执行以下操作来验证它们是否并行运行

\n\n
System.out.println(System.currentTimeMillis() +">>> executing testXXX");\nSystem.out.println(System.currentTimeMillis() +">>> finished  testXXX");\n
Run Code Online (Sandbox Code Playgroud)\n\n

在每个方法的开始和结束处。\n输出为:

\n\n
1530602546964>>> executing testInstantiation                                                                                                                         \n1530602547036<<< finished  testInstantiation                                                                                                                         \n1530602547042>>> executing testSimilarNamedResources                                                                                                                 \n1530602547050>>> executing testTranslateWithMissingKey                                                                                                               \n1530602547051>>> executing testTryTranslateWithMissingKey                                                                                                            \n1530602547051<<< finished  testTryTranslateWithMissingKey                                                                                                            \n1530602547051>>> executing testTranslationMapWithMissingKey                                                                                                          \n1530602547055>>> executing testSilentlyIgnoringExceptionTranslationMapWithMissingKey                                                                                 \n1530602547055<<< finished  testSilentlyIgnoringExceptionTranslationMapWithMissingKey   \n
Run Code Online (Sandbox Code Playgroud)\n\n

正如我们所看到的,在 testSimilarNamedResources 启动后,其他一些测试也启动了。

\n\n

我尝试将 Surefire 插件配置为不并行运行:

\n\n
<build>                                                                                                                                                           \n   <plugins>\n     <plugin>\n       <groupId>org.apache.maven.plugins</groupId>\n       <artifactId>maven-surefire-plugin</artifactId>\n       <version>2.22.0</version>\n       <configuration>\n         <!--parallel>false</parallel-->\n         <threadCount>1</threadCount>\n         <perCoreThreadCount>false</perCoreThreadCount>\n       </configuration>\n     </plugin>\n   </plugins>\n</build>\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它仍然并行执行这些测试。\n我运行 mvn 并选择-X查看我的配置是否已应用并得到以下输出:

\n\n
$ mvn -X test | grep …
Run Code Online (Sandbox Code Playgroud)

java junit maven maven-surefire-plugin

7
推荐指数
1
解决办法
1万
查看次数

Maven surefire 插件在 java 11 上崩溃 jvm(通过直接写入分叉 JVM 1 中的本机流来破坏 STDOUT)

使用 java 11 运行 Maven 构建,构建在运行测试时发出以下警告:

[WARNING] Corrupted STDOUT by directly writing to native stream in forked JVM 1. See FAQ web page and the dump file /home/thomas/code/irdeto-control/fps-license-service/fps/target/surefire-reports/2019-04-11T14-05-32_318-jvmRun1.dumpstream
Run Code Online (Sandbox Code Playgroud)

...在构建失败后出现以下 stderr 输出:

$ cat error.message 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project fps: There are test failures.
[ERROR] 
[ERROR] Please refer to /home/user/code/employer-control/fps-license-service/fps/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] The forked VM terminated without properly saying …
Run Code Online (Sandbox Code Playgroud)

jvm fork crash-dumps maven maven-surefire-plugin

7
推荐指数
2
解决办法
7274
查看次数

mvn dependency:go-offline 不下载 maven-surefire-plugin 的要求

我正在尝试在 docker 中构建一个开源项目,并希望节省构建时间,因此我尝试使用mvn dependency:go-offline,它下载 maven-surefire-plugin 本身。

之后运行的mvn -o clean package结果是

[错误] 无法在项目 oxalis-api 上执行目标 org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4:test (default-test):执行目标 org.apache.maven 的默认测试.plugins:maven-surefire-plugin:3.0.0-M4:测试失败:插件org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4或其依赖项之一无法解析:无法访问离线模式下的apache.snapshots ( http://repository.apache.org/snapshots/ ) 并且之前尚未从中下载工件 org.codehaus.plexus:plexus-utils:jar:1.1 。-> [帮助1]

(我启用了快照存储库,因为 maven-dependency-plugin 对于多模块项目存在严重问题)

POM 包括

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M4</version>
                    <configuration>
                        <useSystemClassLoader>false</useSystemClassLoader>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
Run Code Online (Sandbox Code Playgroud)

如上所述,该插件本身在离线后确实存在于我的存储库中。

maven maven-dependency-plugin maven-surefire-plugin

7
推荐指数
2
解决办法
6794
查看次数

在 java maven jacoco 中执行测试时出错:无法执行目标 org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

在 java maven jacoco 中执行测试时出错:无法执行目标 org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

早上好。我正在执行一个 Maven 项目,我使用 NetBeans 编写 Java 代码。当我尝试运行测试文件时,出现此错误:

cd C:\Users\ruimi\Documents\NetBeansProjects\erro_testes_unitarios; "JAVA_HOME=C:\\Program Files\\Java\\jdk-14" cmd /c "\"C:\\Program Files\\netbeans 11.3 tenativa 1000\\NetBeans-11.3\\netbeans\\java\\maven\\bin\\mvn.cmd\" -Dtest=com.mycompany.erro_testes_unitarios.NewMainTest -Dmaven.ext.class.path=\"C:\\Program Files\\netbeans 11.3 tenativa 1000\\NetBeans-11.3\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 test-compile surefire:test"
Scanning for projects...

------------------------------------------------------------------------
Building erro_testes_unitarios 1.0-SNAPSHOT
------------------------------------------------------------------------

--- jacoco-maven-plugin:0.7.7.201606060606:prepare-agent (default) @ erro_testes_unitarios ---
argLine set to -javaagent:C:\\Users\\ruimi\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.7.7.201606060606\\org.jacoco.agent-0.7.7.201606060606-runtime.jar=destfile=C:\\Users\\ruimi\\Documents\\NetBeansProjects\\erro_testes_unitarios\\target\\jacoco.exec

--- maven-resources-plugin:2.6:resources (default-resources) @ erro_testes_unitarios ---
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory C:\Users\ruimi\Documents\NetBeansProjects\erro_testes_unitarios\src\main\resources

--- maven-compiler-plugin:3.1:compile (default-compile) @ erro_testes_unitarios ---
Nothing to compile - all …
Run Code Online (Sandbox Code Playgroud)

java netbeans maven maven-surefire-plugin

7
推荐指数
1
解决办法
6967
查看次数