【问题标题】:How to integrate Spring Instrument javaagent in ALL JUnit tests如何在所有 JUnit 测试中集成 Spring Instrument javaagent
【发布时间】:2020-02-10 15:30:13
【问题描述】:

我正在为一个大型项目编写单元测试,我需要将 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 参数)而是它自己的显然失败,因为参数不存在。这是个大问题,有没有办法以某种方式将这些 JVM 参数直接“硬编码”到 POM 中?

******编辑 2******

这是我的 POM.xml 文件中的 Spring-Boot-Maven-Plugin 配置:

<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>

谢谢!

【问题讨论】:

    标签: java spring junit javaagents


    【解决方案1】:

    您可以在 surefire 插件中设置 jvm 参数。使用 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

    【讨论】:

    • 目前在我的 POM 中唯一不是 docker 或 launch4j 的插件是 Spring-Boot-Maven-Plugin。在它上面加上万无一失会不会有任何不良影响? Spring-Boot 插件可以类似设置吗?
    • 你是如何运行你的测试的? mvn 命令?您也可以将 jvm args 添加到 spring boot maven 插件。在配置属性中使用jvmArguments
    • 我对这个项目的 maven 构建的运行配置包含 clean、install 和 package 目标。这就是我用来构建它的东西。
    • 不行,仍然得到“ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader] 不提供 'addTransformer(ClassFileTransformer)' 方法。”错误是未加载 Spring-Instrument 的标志。我会将我的 Spring-Boot 插件配置添加到我的原始帖子中。
    • 我相信我是根据您的建议并经过一番探索后让它工作的。坚持住哈哈哈
    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多