如何测试依赖项注入是否失败?

时间:2018-06-25 15:24:49

标签: spring-boot

我有一个Spring Integration应用程序,如果提供的属性不正确,我希望我的流程在启动时失败。

例如,我有类似

@ConditionalOnProperty(name = GraphConfig.TRANSFORM_TYPE_KEY, matchIfMissing = true)

在我的代码中,如果此条件的值为true,则在启动时强制执行依赖项注入失败。

现在,我想为此编写一个测试用例。但是使用@SpringBootTest无效,因为依赖项注入将在我的测试方法开始之前就失败。

如果依赖项注入失败,如何使我的测试成功?

2 个答案:

答案 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。