如何解决使用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 举报,一经查实,本站将立刻删除。