Spring Boot测试 - 传递命令行参数

5

我有一个带注释的集成测试:

@WebAppConfiguration
@ActiveProfiles("integration")
@ContextConfiguration(loader = SpringApplicationContextLoader, classes = [MyApplication])
@IntegrationTest(["server.port=0"])

我可以将例如server.port属性传递给测试上下文,但是否有任何方法可以传递命令行参数?我的应用程序通常是这样启动的:

public static final void main(String[] args) {
    SpringApplication.run(AnkaraCollectorApplication.class, args);
}

我想向测试上下文传递一些参数。有没有相应的属性可以实现这个功能?

3个回答

0

在 Spring 2X 中使用:

mvn clean install -Darg1=val1 -Darg2=val2

使用@Value属性注入,您将永远不会遇到“无法解析占位符”的问题


0
如果您正在使用Maven,可以在failsafe插件内传递测试JVM参数: maven-failsafe-plugin ... 你想要的任何内容: -DhelloWorld=Test ... 您还可以根据执行的Maven配置文件设置此JVM参数:

<profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- 开发JVM参数 --> <test-arguments>-Dhello=true</test-arguments> <!-- 默认环境 --> <environment>develop</environment> </properties> </profile> ... <plugin> <artifactId>maven-failsafe-plugin</artifactId> <executions> <execution> ... <configuration>
<argLine>${test-arguments}</argLine> </configuration> ...


但我需要传递命令行参数。我使用了一些库,其中有Spring ApplicationListener,这个监听器使用ApplicationEnvironmentPreparedEvent.getArgs()中的命令行参数。我必须做一些让getArgs()返回我的参数的事情。 - wjtk
这里的问题是集成测试没有调用您的Application.main方法。它只检查注释。您在哪里使用这些命令参数? - jfcorugedo

0

尝试在测试类内设置:

static {
    System.setProperty("key", "value");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接