2016-12-20 5 views
0

У меня есть класс @SpringBootApplication в каталоге java/ (тот же пакет) и еще один класс @SpringBootApplication в test/ для издевательств над некоторыми авто-проводными компонентами. Существует несколько тестов и какая конфигурация используется, варьируется от теста к тесту.Исключить конфигурацию, когда @WebMvcTest в Spring Boot 1.4

А в тестовом классе

@RunWith(SpringRunner.class) 
@WebMvcTest(RecApiServerController.class) 

бросает

java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes [Generic bean: class [com.xxx.MockedTestConfig]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [/..direction.../target/test-classes/com/xxx/MockedTestConfig.class], Generic bean: class [com.xxx.MyApplication]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [/...direction.../target/classes/com/xxx/MyApplication.class]] 

Я просто хочу, чтобы проверить маршрутизацию контроллера.

Как настроить конкретную конфигурацию приложения?

ответ

2

У вас не может быть двух @SpringBootConfiguration (@SpringBootApplication) в той же упаковке. @WebMvcTest автоматически выполняет поиск источника конфигурации (см. the doc). У вас может быть специальный @SpringBootConfiguration (или приложение) во вложенном пакете вашего теста, если вы хотите настроить все, но у вас не может быть двух в одном пакете.

Я не уверен, что в документе очень четко сказано об этом, поэтому мы, вероятно, должны его прояснить.

В любом случае, обычай @SpringBootApplication и нарезка немного странные. @SpringMvcTest уже заботится только о том, что необходимо. Если вы хотите высмеять некоторые бобы, вы должны не определить, что в @SpringBootApplication. Обычный @Configuration, который вы импортируете, в порядке. У нас также есть @MockBean, чтобы автоматически издеваться над вами.

+0

Я изменил 'MockedTestConfig.class' на регулярную @Configuration и добавил' classes = {MyApplication.class, MockedTestConfig.class} 'в @SpringBootTest, и все тесты работали нормально. Они не делали этого раньше, поэтому я изменил его на @SpringBootApplication. Я думаю, что порядок в «классах» был неправильным в то время. Спасибо. :) – margincall