Java 如何对使用存储库的服务层进行Spring单元测试?
我正在开发一个SpringREST应用程序,有一个使用存储库访问数据库的服务,可以恢复我使用MongoDB的N个最后文档 因此,我的服务具有以下功能:Java 如何对使用存储库的服务层进行Spring单元测试?,java,spring,unit-testing,Java,Spring,Unit Testing,我正在开发一个SpringREST应用程序,有一个使用存储库访问数据库的服务,可以恢复我使用MongoDB的N个最后文档 因此,我的服务具有以下功能: @Async public CompletableFuture<List<MessageLogViewDto>> listLogs(int total) { // Request the entities using PageRequest to list only last N registers ordered b
@Async
public CompletableFuture<List<MessageLogViewDto>> listLogs(int total) {
// Request the entities using PageRequest to list only last N registers ordered by DATE (DESC). I don't known a better way to do this!
PageRequest page = new PageRequest(0, total, Sort.Direction.DESC, "Date");
Page<MessageLog> messages = logRepo.findAll(page);
// Convert the Entity to DTO
List<MessageLogViewDto> messageList = messages.getContent().stream().map(
message -> convertDto.toMessageLogView(message)).collect(Collectors.toList());
return CompletableFuture.completedFuture(messageList);
}
有什么帮助吗?这可能是一个有点争议的观点,但我只关注单元测试您的转换器,因为在这个方法中没有其他有意义的自定义逻辑 看看它的方法:
// 1 - Create an instance of a Spring class
PageRequest page = new PageRequest(0, total, Sort.Direction.DESC, "Date");
// 2 - Query a Spring Repository with the Spring Class
Page<MessageLog> messages = logRepo.findAll(page);
// 3 - CUSTOM LOGIC to convert result to custom DTO class
List<MessageLogViewDto> messageList = messages.getContent().stream().map(
message -> convertDto.toMessageLogView(message)).collect(Collectors.toList());
// 4 - Return a Java standard CompleteableFuture
return CompletableFuture.completedFuture(messageList);
然后,您可以简单地使用各种情况测试该方法,包括有效数据、空/空列表等。。然后返回新页面ImplSomeListOfTestData,或者使用一些答案测试args.tks@RC。现在就试试!tks@Ben。我意识到返回值的模拟必须是预期的大小。所以,我的mock只是返回了一个null值,然后检查是否使用正确的参数pagesize、orderby等调用了存储库。然后,对转换器进行了另一个测试。
// 1 - Create an instance of a Spring class
PageRequest page = new PageRequest(0, total, Sort.Direction.DESC, "Date");
// 2 - Query a Spring Repository with the Spring Class
Page<MessageLog> messages = logRepo.findAll(page);
// 3 - CUSTOM LOGIC to convert result to custom DTO class
List<MessageLogViewDto> messageList = messages.getContent().stream().map(
message -> convertDto.toMessageLogView(message)).collect(Collectors.toList());
// 4 - Return a Java standard CompleteableFuture
return CompletableFuture.completedFuture(messageList);
List<MessageLogViewDTO> convertMessageLogsToMessageLogViewDTO(List<MessageLog> messages) {
return messages.getContent().stream().map(
message -> convertDto.toMessageLogView(message)).collect(Collectors.toList());
}