我正在使用Spring Boot 1.4.3.RELEASE,并希望在运行测试时排除某些组件被扫描。
@RunWith(SpringRunner.class)
@SpringBootTest
@ComponentScan(
basePackages = {"com.foobar"},
excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {AmazonKinesisRecordChecker.class, MyAmazonCredentials.class}))
public class ApplicationTests {
@Test
public void contextLoads() {
}
}
尽管有过滤器,但是当我运行测试时,加载了不需要的组件,Spring Boot崩溃,因为这些类需要AWS环境才能正常工作:
2017-01-25 16:02:49.234 ERROR 10514 --- [ main] o.s.boot.SpringApplication : Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'amazonKinesisRecordChecker' defined in file
问题:如何让过滤器正常工作?
答案 0 :(得分:3)
您需要的是,不是要排除它们,而是使用@MockBean
来模拟它们。如下图所示
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@MockBean
AmazonCredentials amazonCredentials;
@Test
public void contextLoads() {
}
}
这样你就可以让Spring Context知道你想要模拟AmazonCredentials
bean。有时,排除过滤器有点棘手。
希望这有帮助!如果我们有另一种方法来完成这项工作,我很乐意探索。