Я использую фреймворк для своего проекта. При выполнении теста для одного из методов post я возвращаю нулевое значение вместо тела ответа. Однако когда я вызываю контроллер непосредственно в методе теста, все тесты работают нормально. Пожалуйста, смотрите мой контроллер и тестовый код соответственно.
Контроллер. Java
@Post(consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON)
public HttpResponse<ResultAttemptDTO> save(@Body Response response) {
User user = triviaService.checkUser(response.getUser());
int isCorrect = Utils.checkResponse(response);
/*Creates a new resultAttempt */
ResultAttempt resultAttempt = new ResultAttempt(
user.getId(),
LocalDateTime.now(),
response.getQuestion(),
response.getAnswer(),
Utils.generateAttemptId(),
isCorrect == 1 ? true: false);
ResultAttempt result = triviaResultService.postTriviaResults(resultAttempt);
gamificationClient.save(user.getId(), Utils.generateAttemptId(), isCorrect);
ResultAttemptDTO resultAttemptDTO = Utils.resultAttemptDTO(resultAttempt);
return HttpResponse.ok(resultAttemptDTO);
}
TestController. Java
@Test
void testPostResultAttempt() {
User user = new User();
user.setName("name");
user.setId(1l);
Response response1 = new Response();
response1.setAnswer("Trump");
response1.setQuestion("Who is the president of the USA");
response1.setChoices("Obama|Trump|Lincon");
response1.setCorrectAnswer(1);
response1.setUser(user);
ResultAttempt resultAttempt = new ResultAttempt();
resultAttempt.setAnswer("Trump");
resultAttempt.setQuestion("Who is the president of the USA");
resultAttempt.setLocalDateTime(LocalDateTime.now());
resultAttempt.setCorrect(true);
resultAttempt.setUserId(1l);
resultAttempt.setAttemptId(1);
resultAttempt.setId(1l);
Result result = new Result(1l, 1, 1);
ResultAttemptDTO resultAttemptDTO = new ResultAttemptDTO(resultAttempt.getUserId(),
Utils.dateFormat(LocalDateTime.now()), resultAttempt.getQuestion(), resultAttempt.getAnswer(),
String.valueOf(resultAttempt.isCorrect()));
when(triviaService.checkUser(user)).thenReturn(user);
when(triviaResultService.postTriviaResults(resultAttempt))
.thenReturn(resultAttempt);
when(gamificationClient.save(resultAttempt.getUserId(), resultAttempt.getAttemptId(), 1))
.thenReturn(result);
HttpResponse<ResultAttemptDTO> response = client.toBlocking().exchange(HttpRequest.POST("results", response1));
//HttpResponse<ResultAttemptDTO> response = trivialResultController.save(response1);
System.out.println(response.body());
assertEquals(response.body(), resultAttemptDTO);
assertEquals(response.status(), HttpStatus.OK);
}
Код
HttpResponse<ResultAttemptDTO> response = client.toBlocking().exchange(HttpRequest.POST("results", response1));
возвращает ноль, когда я должен получить объект ResultAttemptDTO.
Все отлично работает с
HttpResponse<ResultAttemptDTO> response = trivialResultController.save(response1);
Есть предложения, почему он не работает?