【发布时间】:2018-11-09 10:32:18
【问题描述】:
我使用 BDD - 方法测试我的应用程序。到目前为止,这很简单,因为我每个模块都有一个外观和一个存储库。我的模块(外观)的单元测试看起来像:
测试中:
private TaskForm createSimpleTask() {
return new TaskForm("Task1", "Text1");
}
// given
TaskForm form = createSimpleTask();
// when
TaskDto savedTask = taskFacade.save(form);
// then
TaskWithUserDto loadedTask = taskFacade.load(savedTask.getId());
assertNonNull(loadedTask);
assertEquals(loadedTask.getTitle(), "Task1");
assertEquals(loadedTask.getText(), "Text1");
assertEquas(loadedTask.getAuthor(), "Michal");
在 taskFacade 中:
TaskDto save(TaskForm form) {
UserDto currentUser = userFacade.getLoggedUser();
Task task = taskFactory.create(form, currentUser.getId());
return taskRepo.save(task).dto();
}
TaskWithUserDto load(long taskId) {
Task task = taskRepo.findById(taskId);
UserDto user = userFacade.load(task.getUserId());
return new TaskWithUserDto(task.getTitle(), task.getText(), user.getName());
}
我现在已经开始使用 CQRS,但我不知道如何使用这种架构测试系统。为什么?
我有 CommandTaskFacade 和 QueryTaskRepository,而不是一个外观。第一个只返回 long 或 void(它只有命令),第二个有很多返回读取模型的查询方法(用于 UI 的 dtos)。
因此,我有带有 Task 实体的 TaskRepo - 没有 getter 的业务对象和到 dto 的映射方法(如前所述)和带有返回 dtos 的简单搜索方法的 QueryTaskRepository。
在集成测试中它工作得很好,因为我使用真正的数据库,但在单元测试中,我注入了一个使用 HashMap 的简单内存存储库实现。没有 CQRS 很容易测试,因为我有一个模型和数据源(一个带有一个哈希映射的 repo),但是现在 InMemoryQueryTaskRepository 对 InMemoryTaskRepository 中的状态一无所知。
你有什么想法如何测试它(单元)?
【问题讨论】:
标签: java domain-driven-design bdd cqrs