微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用jaxrs,dao和jpql,在glassfish上运行的Java后端应用程序的单元测试

如何解决使用jaxrs,dao和jpql,在glassfish上运行的Java后端应用程序的单元测试

我正在考虑将JUnits编写到我的CRUD应用程序中,但是我徘徊了真正进行真正的单元测试的意义。我将向您展示我的基本应用程序结构。通常,客户端应用程序调用REST端点以使用服务获取工作人员列表(包括分页信息),然后使用dao来访问数据库(jpql语言)。这是它的基本结构:

class WorkerRequest {

  private int pageSize;
  private int pageNumber;

}

class WorkerController{

  @POST
  public Response getWorkers(final WorkerRequest request) {
    return Response.ok(workerService.getWorkers(request)).build();
  }

}

class WorkerService{

  public WorkerResponseDTO getWorkers(final WorkerRequest request) {
    final long totalWorkerCount = workerDao.getTotalCount(request);
    final List<WorkerDTO> workers =     
    workerDao.getWorkers(request).stream().map(WorkerDTO::new).collect(toList());
    return new WorkerResponseDTO(totalWorkerCount,workers);
  }

}


class WorkerDao implements BasicWorkerDao{

  @Override
  public List<Worker> getWorkersForPage(final WorkerRequest request) {
    final String query = "select w from Worker w";
    return entityManager.createquery(query,Worker.class)
        .setFirstResult(util.calcStartPosition(request))
        .setMaxResults(request.getPageSize())
        .getResultList();
  }

  @Override
  public long getTotalWorkerCount(final WorkerRequest request) {
    return entityManager.createquery("select count(w) from Worker w",Long.class).getSingleResult();
  }
}

现在我在想,引入真正的单元测试真的对我有意义吗?我的意思是我可以用一些MockDao模拟我的真实dao,在那里我可以简单地引入工人数组。但是,这将如何工作?

例如,在实际情况下,如果我传递的请求的大小为pageSize = 20,而pageNumber = 4,则我希望工作人员的人数为61到80,这意味着我将简单地使用诸如list.stream()。skip之类的getWorkersForPage代码在MockDao中编写代码((pageNumber-1)* pageSize).limit(pageSize),仅此而已?对我来说似乎很愚蠢。

如果dao负责始终让所有工作人员负责,然后服务将对其进行过滤,进行一些排序,计算分页等,那么进行那些单元测试就没有道理了。但是当sql完成所有工作时,是否会使用此MockDao呢?

也许测试该功能/应用程序的唯一方法是提供带有一些内存数据库的集成测试,然后进行测试就很有意义,因为我也将测试sql语句。

我希望您知道我的意思,通常是什么方法在这种情况下最好的方法是什么?

欢呼

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。