标签: maven-surefire-plugin

在Spring LTW环境中使用Maven运行单元测试

我正在使用Spring LoadTimeWeaving功能在ddd架构中开发应用程序.问题是我可以使用eclipse运行我的Junit测试,但不能通过Maven运行.我尝试了各种网站上提供的所有选项,但它根本不起作用.我得到以下异常:

引起:org.springframework.beans.factory.BeanCreationException:创建名为'loadTimeWeaver'的bean时出错:bean的初始化失败; 嵌套异常是java.lang.IllegalStateException:ClassLoader [sun.misc.Launcher $ AppClassLoader]不提供'addTransformer(ClassFileTransformer)'方法.指定自定义LoadTimeWeaver或使用Spring的代理启动Java虚拟机:-javaagent:org.springframework.instrument.jar

我已将仪器jar作为argLine的一部分添加到surefire插件中.以下是我的代码工件.请让我知道我哪里出错或者是否有其他解决方案.

我在Mac OSX上使用Eclipse Indigo for Development,Maven 3.0

pom.xml(仅限重要细节)

<dependencies>
    <!-- Spring Dependencies -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>


    <!-- Spring Security Dependencies --> …
Run Code Online (Sandbox Code Playgroud)

spring junit4 load-time-weaving maven-surefire-plugin

8
推荐指数
1
解决办法
6366
查看次数

Maven surefire 2.12不使用-Dtest参数运行特定测试

升级项目的所有Maven插件版本后,我遇到了以下问题:当我运行基本命令时mvn test -Dtest=SomeTest,构建完成,根本没有执行测试.实际上,我无法使用-Dtest参数运行任何测试(当然测试存在,并且在我执行时运行mvn test).

经过一些搜索后,问题似乎是由于使用了surefire 2.12插件.我已经测试了几个版本的Maven(2.2.1/3.0.2)和JUnit(4.7.x,4.8,4.10,甚至是3.8.x),但它们对我的问题没有影响.

那么也许我的项目有一些可能会对其产生影响的具体配置?无论如何,我创建了一个新项目,使用mvn archetype:generate(使用基本的org.apache.maven.archetypes:maven-archetype-quickstart).

我只修改了两件事pom.xml:使用JUnit 4.10(但它没有改变任何东西,我尝试过其他版本),并定义了surefire的版本:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.11</version>
            </plugin>
        </plugins>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

我运行mvn test -Dtest=AppTest(由原型创建的默认JUnit测试):

-------------------------------------------------------  T E S T S
------------------------------------------------------- Running foo.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time
elapsed: 0.031 …
Run Code Online (Sandbox Code Playgroud)

maven maven-surefire-plugin

8
推荐指数
1
解决办法
7497
查看次数

maven-surefire插件中的"默认测试"代表什么?

我在我的pom中使用TestNg确定了以下配置:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <skipTests>${skip-all-tests}</skipTests>
            </configuration>
            <executions>
                <execution>
                    <id>unit-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skip-unit-tests}</skip>
                        <groups>unit</groups>

                        <excludedGroups>integration</excludedGroups>
                    </configuration>
                </execution>
                <execution>
                    <id>integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skip-integration-tests}</skip>
                        <groups>integration</groups>
                        <excludedGroups>unit</excludedGroups>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但似乎两次执行总是先于"默认测试"运行,它似乎运行每个@test注释方法(至少我认为是这样).

--- maven-surefire-plugin:2.12:test (default-test) @ my-project
Run Code Online (Sandbox Code Playgroud)

例如,在项目上运行"mvn test",就会发生两次测试."默认测试"和"单元测试".

有人可以向我解释一下吗?这可以被禁用或控制(配置什么是测试的,什么不是)?

testng maven-3 maven-surefire-plugin

8
推荐指数
2
解决办法
8386
查看次数

我应该在哪里为Junit @Category设置接口类?

我想定义项目范围的接口,用于@Category注释,并配置Maven在构建整个项目时排除它们的注释测试.

应用程序项目中,有一个我要分类的测试:

@Category(Integration.class)
@Test
public void testExternalResource() { ... }
Run Code Online (Sandbox Code Playgroud)

那个设定:

我已经建立了一个多模块maven项目:

/container (has a pom with <modules> element)
    /parent (all other modules inherit from its pom. has no source, only pom)
    /util (other modules are depending on it)
    /infra
    /application (depending on infra and util, inherits from parent)
Run Code Online (Sandbox Code Playgroud)

作为一个基础设施狂热者:),我想配置我的整个项目以排除任何模块中的组.所以,在模块中我定义了:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
         <excludedGroups>com.mycompany.test.Integration</excludedGroups>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我将Integration接口放在util模块中(在util/src/test/java)中,所有模块都可以看到:

package com.mycompany.test;
public interface Integration {}
Run Code Online (Sandbox Code Playgroud)

因为它是一个test-jar, …

junit integration-testing maven maven-surefire-plugin

8
推荐指数
1
解决办法
3341
查看次数

从Maven控制台删除logback`INFO`消息以进行junit测试

我把一个logback.xmlsrc/test/resources从我的Maven项目.我的目的是为我的测试和实际代码提供单独的logback配置.My logback.xml如下所示: -

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- Daily rollover -->
      <fileNamePattern>/tmp/SolrUpdaterTest.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- Keep 7 days' worth of history -->
      <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root>
    <level value="ERROR" />
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="FILE" />
  </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

虽然mvn test我已经设置了根错误级别,但是在我的maven控制台上堆满了大量的logback INFO消息,如下所示ERROR

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running …
Run Code Online (Sandbox Code Playgroud)

java junit junit4 maven-3 maven-surefire-plugin

8
推荐指数
1
解决办法
1240
查看次数

Maven Surefire插件没有重新运行失败的Cucumber测试

我正在使用Selenium WebDriver(版本2.53.0)的Java实现来针对Web应用程序运行一些自动化测试.使用Cucumber的Java实现(版本1.2.3)以行为驱动测试格式编写测试.我使用Maven(版本3.3.9)导入所有依赖项,并构建和运行测试.使用Cucumber标签将测试组织成不同的类别.例如,我可以使用以下命令从命令行运行用@JohnnyBravo标记的一类测试:

cd path_to_Maven_POM_file
mvn clean test -Dcucumber.options="--tags @JohnnyBravo"
Run Code Online (Sandbox Code Playgroud)

在做了一些研究之后,我发现你可以使用Maven SureFire插件通过-Dsurefire.rerunFailingTestsCount=2在上面的Maven命令中根据此链接添加" "来重新运行失败的测试.然后,我尝试使用下面的命令重新运行该类测试,同时确保其中一些肯定会失败,以便查看它们是否会重新运行:

mvn clean test -Dcucumber.options="--tags @JohnnyBravo" -Dsurefire.rerunFailingTestsCount=2
Run Code Online (Sandbox Code Playgroud)

不幸的是,失败的测试没有重新运行.我在这做错了什么?

我的POM文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>regression-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <cucumber.version>1.2.3</cucumber.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.8.2</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.jtds</groupId>
            <artifactId>jtds</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
        </dependency> …
Run Code Online (Sandbox Code Playgroud)

java command-line maven-surefire-plugin selenium-webdriver cucumber-java

8
推荐指数
1
解决办法
753
查看次数

启动叉发生Maven错误,请在日志中检查输出

我使用Maven,docker-maven-plugin和Spring Boot。现在,我遇到以下问题:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:08 min
[INFO] Finished at: 2018-03-30T20:31:08+03:00
[INFO] Final Memory: 76M/1162M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20.1:verify (default) on project domain: There are test failures.
[ERROR]
[ERROR] Please refer to D:\Projects\decisionwanted\domain\target\failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was cmd.exe /X …
Run Code Online (Sandbox Code Playgroud)

maven maven-surefire-plugin docker spring-boot windows-10

8
推荐指数
4
解决办法
6225
查看次数

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
查看次数

如何避免并行运行 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万
查看次数

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
查看次数