如何修复“ java.lang.AssertionError:预期:<string>但是:<null>”?

时间:2019-05-08 14:09:26

标签: junit mocking mockito

我正在尝试测试我的服务,有的时候我做assertEquals时收到错误消息

这是我的测试

@Test
    public void createNewCommentCreatesNewDTOIfNoDTOExists() {
        CommentDTO commentDTO = mock(CommentDTO.class);
        MergedScopeKey mergedScopeKey = mock(MergedScopeKey.class);

        //set merged scope key
        sut.setInput(mergedScopeKey);
        String commentText = "commentText";

        //define behaviour
        when(commentApplicationService.createCommentDTO(mergedScopeKey, commentText)).thenReturn(commentDTO);

        sut.createNewComment(commentText);

        //test the functionality
        assertNotNull(commentDTO);
        assertEquals(commentText, commentDTO.getCommentText());

        //test the behavior
        verify(commentApplicationService).createCommentDTO(mergedScopeKey, commentText);

    }

这是我要测试的方法:

protected void createNewComment(String commentText) {

        CommentDTO commentDTO = commentApplicationService.getDTOComment(mergedScopeKey);
        if (commentDTO == null) {
            commentApplicationService.createCommentDTO(mergedScopeKey, commentText);
        } else {
            updateComment(commentDTO, commentText);
        }

    }

您有什么想法我做错了吗?

1 个答案:

答案 0 :(得分:1)

您定义行为:

when(commentApplicationService.createCommentDTO(mergedScopeKey, commentText)).thenReturn(commentDTO);

但是在测试中,您致电:

CommentDTO commentDTO = commentApplicationService.getDTOComment(mergedScopeKey);

这是另一种方法,您在此处收到null。

即使您解决了此问题,也要调用updateComment。您的生产代码不太可能对传入的模拟设置期望值,因此您将始终从commentDto.getCommentText()

收到null。

考虑对DTO类使用真实的类而不是模拟。