2017-01-25 2 views
4

J'utilise Spring Boot 1.4.3.RELEASE et je souhaite exclure certains composants de l'analyse lors de l'exécution des tests.Printemps ComponentScan excludeFilters annotation ne fonctionne pas dans le contexte Spring Boot Test

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

} 

Malgré les filtres, quand je lance le test des composants indésirables sont chargés et Spring Boot se bloque comme ces classes ont besoin d'un environnement AWS pour fonctionner correctement:

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 

Question: comment puis-je faire fonctionner les filtres?

+0

@SpringBootTest (classes = << choisir les classes à charger >>). Docs: http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html – Barath

+0

@Bathath Voulez-vous dire qu'il n'y a qu'un moyen d'inclure des classes, mais ne pas les exclure lors de Spring Boot Test? – Javide

+0

Non, je ne le dis pas, vous pouvez utiliser WebMvcTest pour exclure les filtres Doc: http: //docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet /WebMvcTest.html – Barath

Répondre

2

Ce dont vous avez besoin, ce n'est pas de les exclure mais de les simuler à la place, en utilisant @MockBean. Comme indiqué ci-dessous

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

    @Test 
    public void contextLoads() { 
    } 
} 

De cette façon, vous laisser Contexte de printemps savoir que vous voulez se moquer du haricot AmazonCredentials. Parfois, l'exclusion des filtres est un peu difficile à travailler.

Espérons que cela aide! J'aimerais explorer si nous avons un autre moyen d'y parvenir.