我有一个项目,其中我从DTO(数据传输对象)接收对象并将它们转换为视图模型。为了进行此转换,我决定创建一些自定义转换器,以便从DTO属性转换为视图模型时进行一些计算。在所有这些准备就绪,并且转换正在工作之后,我想添加一些单元测试到转换中,以使其更加稳定(我知道这不符合TDD的要求,但这是我能做到的)。问题出现在当我想要测试验证两个视图模型的相等性时。
因为没有一个View-Model定义了
注:View-Models是复杂对象,我不能改变转换到其他技术的方式。
Assert.AreEqual(expected, actual);
因为没有一个View-Model定义了
Equals
方法,并且它们永远不会作为引用相等。以下是我想到和发现可以比较这些对象的一些方法:
定义
Equals
方法。但我不知道是否值得为测试目的而定义。如果我定义了,最好还要定义GetHashCode
方法,因此我认为这种解决方案并不是最好的。另一种可能性是在测试项目中实现
IEqualityComparer<T>
,以将比较逻辑与主转换项目隔离开来,或者将其提取到第三个项目中,以便将来的转换模块可以使用它(如果需要)。这个实现看起来很好,但我不知道是否值得添加另一个具有许多类的项目,这些类也应该进行测试。我在一个Stack Overflow问题上发现的第三种方法看起来很有趣,就是序列化这两个对象并比较字符串。问题是我不知道这是否是编程的好习惯。
注:View-Models是复杂对象,我不能改变转换到其他技术的方式。
IEqualityComparer
中的Equals
一样,该方法接收两个对象并且不仅进行简单比较,而是将它们序列化并返回它们的字符串比较?这种方式足够稳定吗? - meJustAndrew