我有一个Spring Integration应用程序,如果提供的属性不正确,我希望我的流程在启动时失败。
例如,我有类似
@ConditionalOnProperty(name = GraphConfig.TRANSFORM_TYPE_KEY, matchIfMissing = true)
在我的代码中,如果此条件的值为true,则在启动时强制执行依赖项注入失败。
现在,我想为此编写一个测试用例。但是使用@SpringBootTest
无效,因为依赖项注入将在我的测试方法开始之前就失败。
如果依赖项注入失败,如何使我的测试成功?
答案 0 :(得分:2)
你看起来很像吗
public class SpringTEst {
private ConfigurableApplicationContext context;
private ConfigurableEnvironment environment = new StandardEnvironment();
@Test
public void allPropertiesAreDefined() {
load(MultiplePropertiesRequiredConfiguration.class, "property1=value2", "property2=value2");
assertThat(this.context.containsBean("foo")).isTrue();
}
private void load(Class<?> config, String... environment) {
TestPropertyValues.of(environment).applyTo(this.environment);
this.context = new SpringApplicationBuilder(config).environment(this.environment).web(WebApplicationType.NONE)
.run();
}
@Configuration
@ConditionalOnProperty(name = { "property1", "property2" })
protected static class MultiplePropertiesRequiredConfiguration {
@Bean
public String foo() {
return "foo";
}
}
}
如果仅使用“ property1 = value2” 或_“ property5 = value2”调用 load 方法,则上述测试用例将失败。
答案 1 :(得分:0)
现在,我想为此编写一个测试用例。但是使用@SpringBootTest无效,因为依赖项注入将在我的测试方法开始之前失败。 如果提供的属性不正确,我希望流程在启动时失败。
但这是“检查”应用程序上下文的正确性的方法。你真正想要的是什么? 如果希望测试变成绿色,如果缺少某些bean,则应尝试从上下文中获取“预期丢失”的bean,并断言它们为null。