@SpringIntegrationTest批注未按预期加载上下文

时间:2018-09-12 14:37:13

标签: spring-integration

通常,当我使用@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

1 个答案:

答案 0 :(得分:0)

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

编辑

这对我来说很好:

@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