gpt4 book ai didi

spring - 将参数传递给 Spring 测试

转载 作者:行者123 更新时间:2023-12-02 11:34:44 24 4
gpt4 key购买 nike

我们有一个标准的 Spring 测试类,它加载应用程序上下文:

@ContextConfiguration(locations = {"classpath:app-context.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest {
...
}

XML 上下文使用标准占位符,例如:${key} 当完整的应用程序正常运行(不是测试)时,主类将按如下方式加载应用程序上下文,以便命令Spring 可以看到行参数:

PropertySource ps = new SimpleCommandLinePropertySource(args);
context.getEnvironment().getPropertySources().addLast(ps);
context.load("classpath:META-INF/app-context.xml");
context.refresh();
context.start();

运行 Spring 测试时,需要添加哪些代码来确保程序参数(例如 --key=value):从 IDE(在我们的示例中为 Eclipse)传递到应用程序上下文?

谢谢

最佳答案

我认为这是不可能的,不是因为 Spring,请参阅 SO 上的其他问题并进行解释:

如果您决定在 Eclipse 中使用 JVM 参数(-Dkey=value 格式),则在 Spring 中可以轻松使用这些值:

import org.springframework.beans.factory.annotation.Value;

@ContextConfiguration(locations = {"classpath:app-context.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest {

@Value("#{systemProperties[key]}")
private String argument1;

...

}

或者,没有 @Value 并仅使用属性占位符:

@ContextConfiguration(locations = {"classpath:META-INF/spring/test-app-context.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class ExampleConfigurationTests {

@Autowired
private Service service;

@Test
public void testSimpleProperties() throws Exception {
System.out.println(service.getMessage());
}

}

其中 test-app-context.xml

<bean class="com.foo.bar.ExampleService">
<property name="arg" value="${arg1}" />
</bean>

<context:property-placeholder />

ExampleService是:

@Component
public class ExampleService implements Service {

private String arg;

public String getArg() {
return arg;
}

public void setArg(String arg) {
this.arg = arg;
}

public String getMessage() {
return arg;
}
}

传递给测试的参数是一个VM参数(如-Darg1=value1指定)并且不是一个程序参数

两者都在 Eclipse 中通过在测试类上右键单击进行访问 -> 运行方式 -> 运行配置 -> JUnit -> 参数选项卡 -> 虚拟机参数

关于spring - 将参数传递给 Spring 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com