首页 > 解决方案 > @SpringIntegrationTest 注解未按预期加载上下文

问题描述

通常,当我使用时,@SpringBootTest我会得到 bean 的完整上下文。我可以@Autowire获取应用程序启动后可用的各种 bean。现在,在库的范围内spring-integration-test@SpringIntegrationTest不这样做。

正如测试模块所承诺的那样,您可以使用

@Autowired
private MockIntegrationContext mockIntegrationContext;

但是,在检查了该实例的 bean 映射后,我发现没有bean!

示例测试:

@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringIntegrationTest
public class AppTest {

    @Autowired
    private MockIntegrationContext mockIntegrationContext;

    @Test
    public void contextLoads() {
        // put breakpoint to inspect field
        System.out.println(mockIntegrationContext);
    }
}

然而,当我运行以下代码时,我得到了一个完整的上下文:

@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest
public class App2Test {

    @Autowired
    private ListableBeanFactory beanFactory;

    @Test
    public void contextLoads() {
        Assert.isTrue(beanFactory.getBeanDefinitionCount() > 0)
    }
}

这是为什么?我怎样才能达到类似的结果spring-integration-test

阅读资料:https ://docs.spring.io/spring-integration/docs/current/reference/html/testing.html

标签: spring-integration

解决方案


它们是独立的注释;你需要两者。

编辑

这对我来说很好:

@RunWith(SpringRunner.class)
@SpringBootTest
@SpringIntegrationTest
public class So52297757ApplicationTests {

    @Autowired
    private MockIntegrationContext mockIntegrationContext;

    @Autowired
    private String foo;

    @Test
    public void contextLoads() {
        System.out.println(foo);
        System.out.println(mockIntegrationContext);
    }

}

@SpringBootApplication
public class So52297757Application {

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

    @Bean
    public String foo() {
        return "foo";
    }

}

foo
org.springframework.integration.test.context.MockIntegrationContext@1de5f0ef

推荐阅读