比较 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
失败,错误将很容易被发现。
我已经开始尝试让我的单元测试尽可能地清晰,但我遇到了:我如何以清晰的方式比较 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
失败,错误将很容易被发现。