В настоящее время я тестирую модули конечных точек Spring Boot CRUD RESTful API, и у меня есть следующая конечная точка «Удалить пользователя по его идентификатору» , состоящая из контроллера и service для реализации своего logi c:
Удалить контроллер (в основном он вызывает logi c службы и определяет некоторые рекомендации):
@RestController
@RequestMapping("/users/{id}")
public class DeleteUserController {
@Autowired
DeleteUserService service;
@DeleteMapping
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteUser_whenDeleteUser(@PathVariable Long id) {
service.deleteUser(id);
}
}
Служба удаления:
@Service
public class DeleteUserService {
@Autowired
UserRepository repository;
public void deleteUser(Long id) {
repository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
repository.deleteById(id);
}
}
Хотя до сих пор все работает нормально, я был бы благодарен, если бы кто-нибудь сказал мне, что я могу улучшить в приведенном выше коде. В любом случае, модульный тест моих контроллеров - это проблема, которую я не могу решить:
@RunWith(SpringRunner.class)
@WebMvcTest(DeleteUserService.class)
public class DeleteUserControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private DeleteUserService deleteUserService;
@Test
public void removeUserById_whenDeleteMethod() throws Exception {
User user = new User();
user.setName("Test Name");
user.setId(89L);
doNothing().when(deleteUserService).deleteUser(user.getId());
mvc.perform(delete("/users/" + user.getId().toString())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNoContent());
}
Я получаю java .lang.AssertionError: Status потому что, хотя код ожидает получить статус ответа 204 No content , он получает 404 Not found , что означает, что он выбрасывает исключение, которое должно быть сгенерировано, когда пользователь не ' t существует.
Я думаю, что ответ в том, как мне нужно имитировать поведение моих служб logi c, но я понятия не имею, как это сделать. Был бы признателен, если бы кто-нибудь мог мне помочь с этим.