#java #rest #spring-boot #junit4
#java #rest #spring-boot #junit4
Вопрос:
У меня есть проект spring-boot и REST API. Я пытаюсь протестировать операцию поиска @GET. Ниже приведен тестовый пример для метода отображения всех записей.
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(batchJobConfigController).build();
}
@Test
public void testBatchJobConfigs() throws Exception {
BatchJobConfigDTO mockBatchJobConfigDTO = new BatchJobConfigDTO("Doctor", "ER Doctor", "Started", "Full Time");
batchJobConfigDTOs.add(mockBatchJobConfigDTO);
when(mockBatchJobConfigService.findAllBatchJobConfigs()).thenReturn(batchJobConfigDTOs);
mockMvc.perform(get("/configs").accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.jobNm", Matchers.is("Enginerring")))
.andExpect(MockMvcResultMatchers.jsonPath("$.jobDesc", Matchers.is("Coding, Testing and stuff")))
.andExpect(MockMvcResultMatchers.jsonPath("$.status", Matchers.is("Progress")))
.andExpect(MockMvcResultMatchers.jsonPath("$.jobType", Matchers.is("INFA")));
verify(mockBatchJobConfigService, times(1)).findAllBatchJobConfigs();
verifyNoMoreInteractions(mockBatchJobConfigService);
}
Я получаю следующее, запущенное в JUnit4. В чем может быть причина?
java.lang.IllegalStateException: Configuration error: found multiple declarations of @BootstrapWith for test class [com.controller.BatchJobConfigControllerTest]:
Комментарии:
1. @RunWith(SpringRunner.class ) @SpringBootTest @WebMvcTest(значение = BatchJobConfigController.class , secure = false) открытый класс BatchJobConfigControllerTest {//Приведенный выше метод здесь……………..}
Ответ №1:
Это исключение возникает, когда spring test не может найти основной класс конфигурации. Попробуйте добавить аннотацию @ContextConfiguration в свой тестовый класс.
например ,
@RunWith(SpringRunner.class)
@ContextConfiguration(classes=Application.class)
@WebMvcTest(MyController.class)
public class MyConrollerTests {
...
}
Ответ №2:
Добавление аннотации @ContextConfiguration и определение класса, включая имя пакета, решило эту проблему. @ContextConfiguration(classes=com.somepath.pack.Application.class )