C'est peut-être une évidence pour ceux qui le savent, mais je vais le montrer ici parce que c'était une grande douleur.
Il y avait de telles interfaces de référentiel.
Pour les tests unitaires, j'ai créé une classe Configuration qui renvoie une maquette de chaque référentiel.
MyConfig.java
@Configuration
public class MyConfig {
@Bean
public MenuRepository menuRepository() {
return Mockito.mock(MenuRepository.class);
}
@Bean
public CategoryRepository categoryRepository() {
return Mockito.mock(CategoryRepository.class);
}
@Bean
public UserRepository userRepository() {
return Mockito.mock(UserRepository.class);
}
}
Le test de la destination d'injection est comme ceci.
MyTest.java
//Abréviation
public class MyTest {
@Autowired
private MenuRepository menuRepository;
@Autowired
private CategoryRepository categoryRepository;
@Autowired
private UserRepository userRepository;
}
La méthode @Bean categoryRepository
est appelée, mais aucune autre méthode @Bean n'est appelée.
En conséquence, seul le référentiel de catégories est simulé à la destination de l'injection. .. ..
En regardant le contenu du conteneur, il n'y a que deux CategoryRepository
(mock et original), et un seul autre.
En modifiant le nom de la méthode, toutes les méthodes @Bean sont désormais appelées en toute sécurité.
MyConfig.java
@Configuration
public class MyConfig {
@Bean
@Primary
public MenuRepository menuRepositoryBean() {
return Mockito.mock(MenuRepository.class);
}
@Bean
@Primary
public CategoryRepository categoryRepositoryBean() {
return Mockito.mock(CategoryRepository.class);
}
@Bean
@Primary
public UserRepository userRepositoryBean() {
return Mockito.mock(UserRepository.class);
}
}
De plus, j'ai eu une erreur disant que le type est activé, alors j'ai ajouté @ Primary
.
Pourquoi cela arrive-t-il ...? ??
Recommended Posts