比较 DTO 是否等于 Java 中的域模型

Compare if a DTO is equal with a Domain Model in Java

我已经开始尝试让我的单元测试尽可能地清晰,但我遇到了:我如何以清晰的方式比较 DTO 和包含超过 10 个属性并共享一些属性的域模型 (DM)他们中的一部分,但不是全部?

详细信息:可以有共享属性,但具有不同的类型或不同的名称,因此在这种情况下不能使用反射。

示例:

class Person {
     private String id;
     private String name;
     private String lastName;
     private Date   dateOfbirth;
}

class PersonDto{
     private String id;
     private String name;
     private String lastName;
     private int    dateOfBirth;
}

DTO 不应包含任何类型的复杂逻辑,因为它仅用于在客户端 - 控制器 - 服务之间传输数据。

DM 在服务 - 存储库层之间保留和提供信息。但它不应该有任何复杂的逻辑(到目前为止等于和哈希码)。

然后我在想...我是否应该创建一个TestHelperComparator来执行这个操作?或者在 DTO 或 DM 中实现一种相互比较的方法?或者在这种情况下的最佳做法是什么?

您的代码中某处可能有 DTO 到域映射逻辑,例如PersonToDtoMapper class。确保映射逻辑封装在单独的 class 中。然后,您可以在单元测试中重用此映射器 class,在需要比较时从一种格式转换为另一种格式。

只要 PersonToDtoMapper 在它自己的测试中被测试,在其他测试中重用它应该不是问题,如果 PersonToDtoMapperTest 失败,错误将很容易被发现。