首页 > 解决方案 > 如何测试依赖注入是否失败?

问题描述

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

例如,我有类似的东西

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

在我的代码中,如果此条件评估为真,我会在启动时强制依赖注入失败。

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

如果依赖注入失败,我怎样才能让我的测试成功?

标签: spring-boot

解决方案


你长得像吗,

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”调用加载方法,上述测试用例将失败。


推荐阅读