Я хочу настроить компонентный тест с помощью spring -test конфигурации внутреннего класса (@Configuration
). Протестированные компоненты имеют некоторые услуги, которые я хотел бы издеваться над тестом. Эти сервисы являются классами (без использования интерфейса) и содержат spring аннотации (@Autowired
). Мокито может легко их высмеять, однако я не нашел способа отключить автосогласование spring.
Пример того, как я могу легко воспроизвести:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SomeTest.Beans.class)
public class SomeTest {
// configured in component-config.xml, using ThirdPartyService
@Autowired
private TestedBean entryPoint;
@Test
public void test() {
}
@Configuration
@ImportResource("/spring/component-config.xml")
static class Beans {
@Bean
ThirdPartyService createThirdPartyService() {
return mock(ThirdPartyService.class);
}
}
}
public class ThirdPartyService {
@Autowired
Foo bar;
}
public class TestedBean {
@Autowired
private ThirdPartyService service;
}
В этом примере "TestBean" представляет собой услугу, которую нужно издеваться. Я бы не хотел, чтобы "бар" вводился spring! @Bean(autowire = NO)
не помогает (на самом деле это значение по умолчанию).
(Пожалуйста, сохраните меня из комментариев "Использовать интерфейсы!" - посмеянный сервис может быть третьим лицом, с которым я ничего не могу сделать.)
UPDATE
Springockito частично решает проблему, если вам не нужно ничего настраивать (поэтому вы не можете использовать класс конфигурации с Springockito - он не поддерживает его), но используйте только mocks. Все еще ищет чистое решение spring, если есть...