我正在尝试测试我的服务,有的时候我做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);
}
}
您有什么想法我做错了吗?
答案 0 :(得分:1)
您定义行为:
when(commentApplicationService.createCommentDTO(mergedScopeKey, commentText)).thenReturn(commentDTO);
但是在测试中,您致电:
CommentDTO commentDTO = commentApplicationService.getDTOComment(mergedScopeKey);
这是另一种方法,您在此处收到null。
即使您解决了此问题,也要调用updateComment。您的生产代码不太可能对传入的模拟设置期望值,因此您将始终从commentDto.getCommentText()
收到null。考虑对DTO类使用真实的类而不是模拟。