У меня есть приложение с пружинной загрузкой, дающее множество контроллеров, и моя цель - создать интеграционный тест для конкретного c. Я читал, что мы можем получить тестовый фрагмент с аннотацией @WebMvcTest
, которая загружает только то, что необходимо для развертывания целевого контроллера, верно ли это предположение ? Вот мой тест:
@RunWith(SpringRunner.class)
@WebMvcTest(
controllers = {DummyController.class},
)
public class DummyControllerIT {
@Autowired
private MockMvc mockMvc;
...
К сожалению, выполнение пытается развернуть другие контроллеры / службы / репозитории, которые не имеют отношения к целевому контроллеру, что вынуждает меня использовать @MockBean
на каждом из них. У меня сложилось впечатление, что @WebMvcTest
избавит меня от обширного списка объявленных контроллеров / служб / репозиториев с аннотацией @MockBean
, я не прав?
Если я неверно истолковал это и я должен использовать @MockBean
на несвязанных частях приложения, тогда почему лучше использовать @WebMvcTest
вместо @SpringBootTest
? С другой стороны, если я правильно понял, что мне не хватает?
Не уверен, что это связано, но это мой инициализатор:
@ComponentScan(scopedProxy = ScopedProxyMode.INTERFACES)
@SpringBootApplication
@EnableTransactionManagement
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableScheduling
@EnableCaching
@EnableJpaAuditing
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
public class Application extends SpringBootServletInitializer {
@Autowired
private Environment env;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Bean
@Primary
public TaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(Integer.parseInt(Objects.requireNonNull(env.getProperty("coreThreadPoolSize"))));
executor.setMaxPoolSize(Integer.parseInt(Objects.requireNonNull(env.getProperty("maxThreadPoolSize"))));
executor.initialize();
return executor;
}
}
Спасибо за вашу помощь.