如何在所有 JUnit 测试中集成 Spring Instrument javaagent
How to integrate Spring Instrument javaagent in ALL JUnit tests
我正在为一个大型项目编写单元测试,我需要将 JVM 参数传递给该项目,这些是我为该项目内置到 Eclipse 运行 配置中的 JVM 参数:
--module-path lib/javafx-sdk-13.0.2/lib --add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
我的问题是我需要为每个 JUnit 测试或测试序列添加这些参数。有更好的方法吗?有什么方法可以不必手动将这些参数添加到我创建的每个新测试中?
******编辑******
这还有一个令人讨厌的副作用,那就是根本不允许我构建这个项目! Maven 不使用我的自定义 JUnit 运行 配置来 运行 应用程序的整个测试集(它工作正常,因为我在那里设置了 JVM 参数)而是它自己的,这显然失败了,因为参数不存在。这是个大问题,有没有办法 "hardcode" 这些 JVM 参数以某种方式直接进入 POM?
******编辑 2******
这是我的 Spring-Boot-Maven-Plugin 配置,在我的 POM.xml 文件中:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmArguments>
--module-path lib/javafx-sdk-13.0.2/lib
--add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
</jvmArguments>
</configuration>
</plugin>
******解决方案******
添加 Maven Surefire 插件并以这种方式设置它解决了问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<argLine>
--module-path lib/javafx-sdk-13.0.2/lib
--add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
</argLine>
</configuration>
</plugin>
谢谢!
您可以在 surefire 插件中设置 jvm args。使用 mvn test 运行 测试。像
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<argLine>-Djava.security.policy=${basedir}/src/test/resources/java.policy</argLine>
</configuration>
</plugin>
</plugins>
这里有更多内容http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#argLine
我正在为一个大型项目编写单元测试,我需要将 JVM 参数传递给该项目,这些是我为该项目内置到 Eclipse 运行 配置中的 JVM 参数:
--module-path lib/javafx-sdk-13.0.2/lib --add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
我的问题是我需要为每个 JUnit 测试或测试序列添加这些参数。有更好的方法吗?有什么方法可以不必手动将这些参数添加到我创建的每个新测试中?
******编辑******
这还有一个令人讨厌的副作用,那就是根本不允许我构建这个项目! Maven 不使用我的自定义 JUnit 运行 配置来 运行 应用程序的整个测试集(它工作正常,因为我在那里设置了 JVM 参数)而是它自己的,这显然失败了,因为参数不存在。这是个大问题,有没有办法 "hardcode" 这些 JVM 参数以某种方式直接进入 POM?
******编辑 2******
这是我的 Spring-Boot-Maven-Plugin 配置,在我的 POM.xml 文件中:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmArguments>
--module-path lib/javafx-sdk-13.0.2/lib
--add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
</jvmArguments>
</configuration>
</plugin>
******解决方案******
添加 Maven Surefire 插件并以这种方式设置它解决了问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<argLine>
--module-path lib/javafx-sdk-13.0.2/lib
--add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
</argLine>
</configuration>
</plugin>
谢谢!
您可以在 surefire 插件中设置 jvm args。使用 mvn test 运行 测试。像
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<argLine>-Djava.security.policy=${basedir}/src/test/resources/java.policy</argLine>
</configuration>
</plugin>
</plugins>
这里有更多内容http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#argLine