Micronaut Junit 5 тестирование метода Post ложно возвращает ноль - PullRequest
0 голосов
/ 29 января 2020

Я использую фреймворк для своего проекта. При выполнении теста для одного из методов 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);

Есть предложения, почему он не работает?

1 Ответ

0 голосов
/ 31 января 2020

все. Мне удалось решить проблему. Проблема была в том, что я не передал параметр типа any () в проверяемые методы. Отсюда и проблема. Пожалуйста, найдите мой исправленный код следующим образом:

    @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(any(ResultAttempt.class)))
                .thenReturn(resultAttempt);

        when(gamificationClient.save(anyLong(), anyInt(), anyInt()))
                .thenReturn(result);

        HttpResponse<ResultAttemptDTO> response = client.toBlocking().exchange(HttpRequest.POST("/results", response1), ResultAttemptDTO.class);

        assertEquals(resultAttemptDTO, response.body());
        assertEquals(HttpStatus.OK, response.status());
    }
...