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