У меня есть REST-контроллер, который я пытаюсь протестировать, но при попытке POST к нему я получаю 404. Тест - JUnit 5 и Spring Boot 2.1.5. Если я запускаю приложение, я могу нажать на контроллер через Почтальон. Я запустил его в режиме отладки и убедился, что myController
не равен нулю и в него вставлены проверенные сервисы. Что мне здесь не хватает? spring-boot-starter-test является зависимостью, а junit4 является исключением.
@RestController
@Slf4j
@RequestMapping(path = /integrations,
produces = "application/json")
public class MyController {
private MyService myService;
private MyValidationService myValidationService;
public MyController(MySerivce service, MyValidationService myValidationService) {
this.myService = service;
this.myValidationService = myValidationService;
}
@PostMapping(path = "/users", produces = "application/json", consumes =
"application/json")
public ResponseEntity<User> getUserList(@Valid @RequestBody final RequestPayload
requestPayload, @RequestHeader Map<String, String> headers) throws MyException {
// check the credentials and permission
Map<String, String> credInfo = myValidationService.validateHeaders(headers);
// process payload
return myService.retrieveUsers(requestPayload);
}
}
Тест выглядит следующим образом:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
class MyControllerTest {
@MockBean
private MyService myService;
@MockBean
private MyValidationService myValidationService;
@Autowired
private MockMvc mockMvc;
@Autowired
MyController myController;
@Test
public void contextLoads() throws Exception {
Assert.assertNotNull(myController);
}
@Test
void getUserList() throws Exception {
List<User> users = returnUserList();
HttpEntity<RequestPayload> requestHttpEntity = new HttpEntity<>(returnPayload(), null);
when(myService.retrieveUsers(any(RequestPayload.class))).thenReturn(users);
mockMvc.perform(post("/integrations/users")
.contentType(MediaType.APPLICATION_JSON)
.content(asJsonString(returnPayload()))
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().is2xxSuccessful());
}
}
Ответ, который я получаю:
MockHttpServletResponse:
Status = 404
Error message = null
Headers = []
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []