使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...