这是我们单元测试的基类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring/test-context.xml")
public abstract class BaseUnitTest {}
所有单元测试都扩展了这个类。
当我在eclipse中本地运行测试时(使用Run As> Unit Test),测试在大约5秒内运行,因为所有测试共享相同的上下文并且只加载一次。
但是,当我使用mvn测试目标运行它时,大约需要5分钟。查看日志后,我看到正在为每个测试加载应用程序上下文。 我们在Jenkins CI服务器上运行它需要相同的时间(5分钟)。
不确定发生了什么。在spring docs中,它声明即使使用maven也应该重用appContext,但事实并非如此。
任何帮助都将不胜感激。
更新: 我运行带有调试标志的mvn,我发现每个测试都会生成一个新的JVM:
分叉命令行:cmd.exe / X / C“java -Xverify:none -jar S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefirebooter8169952914558366417.jar S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefire8550033206398936560tmp S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefire_05655453605766528120tmp“
分叉命令行:cmd.exe / X / C“java -Xverify:none -jar S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefirebooter4002024477779069323.jar S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefire6735432532690834115tmp S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefire_17783676008756503456tmp“
分叉命令行:cmd.exe / X / C“java -Xverify:none -jar S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ 7874269889863176184.jar S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefire2050758518148174678tmp S:\ git \ picaxo21 \ picaxo \ picaxoService \ target \ surefire \ surefire_27591156970671336255tmp“
我使用forkCount = 1和reuseForks = true所以我不确定为什么会这样。任何线索?
父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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
.....
</parent>
<groupId>...</groupId>
<artifactId>picaxo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>.....</name>
<description>Build All Modules</description>
<modules>
<module>picaxoService</module>
</modules>
<scm>
....
</scm>
<properties>
<pmd.include.tests>true</pmd.include.tests>
<findbugs.plugin.version>3.0.0</findbugs.plugin.version>
<fb.threshold>Low</fb.threshold>
<fb.includeTests>true</fb.includeTests>
<fb.effort>Max</fb.effort>
<fb.failOnError>false</fb.failOnError>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<skipTests>true</skipTests>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<skipTests>${skipTests}</skipTests>
<reuseForks>true</reuseForks>
<forkCount>1</forkCount>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</build>
答案 0 :(得分:0)
发现问题。 显然,用于surefire插件的forkMode默认为pertest因此为每个测试产生了一个新的JVM。在插件配置中明确地将其设置为一次解决了该问题。