使用 mockito 和 spring 测试服务

testing service with mockito and spring

正在尝试测试服务方法。 这是我要测试的方法:

    @Override
public ReportListDto retrieveAllReportsList() {
    List<ReportDto> reportDtos = reportMapper.toDtos(reportRepository.findAll());

    return new ReportListDtoBuilder().reportsDto(reportDtos).build();
}

这是我的测试方法(我从一些教程中得到的):

@Test
public void testRetrieveAllReportList() throws Exception {
    List<Report> expected = new ArrayList<>();
    when(reportRepositoryMock.findAll()).thenReturn(expected);

    ReportListDto actual = reportService.retrieveAllReportsList();

    verify(reportRepositoryMock, times(1)).findAll();
    verifyNoMoreInteractions(reportRepositoryMock);

    assertEquals(expected, actual);
}

但是教程没有使用DTO模型。所以最后一个 asert 预期 List<Report> 对象和实际 ReportListDto 对象。

这是我的 ReportListDto:

public class ReportListDto implements Serializable {
    private List<ReportDto> reports = new ArrayList<>();

    public List<ReportDto> getReports() {
        return reports;
    }

    public void setReports(List<ReportDto> reports) {
        this.reports = reports;
    }
}

我如何测试使用 dto 映射器的服务?

如果您在 ReportListDTO 对象上实现 equalsassertEquals 将使用它。

许多像 intelliJ 或 Eclipse 的 IDE 可以为你做这件事……否则,你可以写这样的东西:

 @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        ReportListDto that = (ReportListDto) o;

        return reports != null ? reports.equals(that.reports) : that.reports == null;

    }