Я хочу создать тесты, работающие с контекстом Spring, с издеваемыми репозиториальными компонентами. Я использую Spring Boot 1.3.2.BUILD-SNAPSHOT + JUnit + Mockito.Mock Beans from Spring Context
Вот мой тест конфигурации класс:
@ComponentScan(basePackages = "myapp", excludeFilters =
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
value = {
OfferRepository.class
}
)
)
@Configuration
public class TestEdge2EdgeConfiguration {
@Bean
public OfferRepository offerRepository() {
return mock(OfferRepository.class);
}
}
Цель этой конфигурации исключить OfferRepository из Спринг контекста и высмеивать его, спасибо этому я буду иметь возможность писать тесты, которые используют Spring контекст с издевательский репозиторий базы данных.
Вот мой тестовый класс:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {TestEdge2EdgeConfiguration.class})
@WebAppConfiguration
public class OfferActionsControllerTest {
@Autowired
private OfferRepository offerRepository;
@Autowired
private OfferActionsController offerActionsController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void saveOffer() {
//given
BDDMockito.given(offerRepository.save(any(Offer.class))).willReturn(new Offer());
//when
ResponseEntity<Offer> save = offerActionsController.save(new Offer());
//then
org.springframework.util.Assert.notNull(save);
}
}
Test и тестовая конфигурация каталог:
src/test/java/myapp
Моя конфигурация приложения и пакеты, содержащие OfferRepository каталог является:
src/main/java/myapp/
Проблема что Spring Boot не загружает мою конфигурацию из TestEdge2EdgeConf iguration.class и mock для OfferRepository никогда не создается.
Может ли любой орган помочь мне с этим, пожалуйста?
Вы пытались с @ContextConfiguration (TestEdge2EdgeConfiguration.class)? – wsl
SpringApplicationConfiguration похожа на стандартную @ContextConfiguration, но использует SpringApplicationContextLoader Spring Boot – zaqpiotr
Мне не было известно об аннотации ComponentScan $ Filter, но после чтения документов и, если я правильно ее понимаю, зачем это нужно в этом случае? Работает ли он без фильтра? –