【问题标题】:Micronaut Junit 5 testing of Post method falsely returns nullMicronaut Junit 5 测试 Post 方法错误返回 null
【发布时间】:2020-01-29 07:53:50
【问题描述】:

我正在为我的项目使用 micronaut 框架。在对其中一种发布方法进行测试时,我返回 null,而不是响应正文。但是,当我直接在测试方法中调用控制器时,所有测试都可以正常工作。请分别查看我的控制器和测试代码。

Controller.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 对象时返回 null。

一切正常

HttpResponse<ResultAttemptDTO> response = trivialResultController.save(response1);

关于它为什么不起作用的任何建议?

【问题讨论】:

标签: micronaut


【解决方案1】:

大家。我设法解决了这个问题。问题是我没有将 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());
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 2021-04-14
    • 2018-09-23
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多