2017-01-25 14 views
4

Я использую Spring Boot 1.4.3.RELEASE и хочу, чтобы некоторые компоненты не проверялись при запуске тестов.Spring ComponentScan excludeFilters аннотация не работает в Spring Boot Test context

@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() { 
    } 

} 

Несмотря на фильтры, когда я запускаю тест нежелательные компоненты загружаются и Спринг загрузки происходит сбой, поскольку эти классы требуют среды 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

@SpringBootTest (classes = << выберите классы для загрузки >>). Документы: http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html – Barath

+0

@Barath Вы говорите, что есть только способ включить классы, но не исключать их, когда весной Boot Test? – Javide

+0

Нет, я так не говорю, вы можете использовать WebMvcTest для исключения фильтров Doc: http: //docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet /WebMvcTest.html – Barath

ответ

2

Что вам нужно, не исключать их, а издеваться над ними, используя @MockBean. Как показано ниже

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class ApplicationTests { 
    @MockBean 
    AmazonCredentials amazonCredentials; 

    @Test 
    public void contextLoads() { 
    } 
} 

Таким образом, вы будете позволить Spring Context знать, что вы хотите, чтобы дразнить AmazonCredentials боб. Иногда, исключая фильтры, немного сложно работать.

Надеюсь, это поможет! Я хотел бы исследовать, есть ли у нас другой способ сделать это.