如何比较两个相似的对象?
给定 FlintlockDTO
和 Flintlock
:
public class FlintlockDTO
{
public string GName { get; set; }
public string SharedPropertyName { get; set; }
...
}
并且
public class Flintlock
{
public Flintlock(FlintlockDTO inflator)
{
this.GoodName = inflator.GName;
this.SharedPropertyName = inflator.SharedPropertyName;
...
}
public string GoodName { get; private set; }
public string SharedPropertyName { get; private set; }
...
}
当两个类共享N个属性(例如SharedPropertyName
),但在M个等效但命名不同的属性(例如GoodName
\ GName
)上有所不同时,需要进行翻译。
类似于fluentassert之类的工具可以实现这一点,如果属性名称匹配,则据我所知,这将起作用:
flintlockDto.ShouldBeEquivalentTo(flintlock);
有没有一种在fluentassert或其他工具中优雅地完成这个操作的方法?
理想情况下,
flintlockDto.IsTheSameAs(flintlock).WhenMapping("GName","GoodName");
Equals(object)
签名,所以它实际上不能与大多数测试框架的AreEqual()
断言一起使用。为了保持平衡,你还需要在Flintlock类中实现相同的相等检查,反过来做吗? - StriplingWarriorEquals
只会影响从FlintlockDTO
到Flintlock
的比较,这正是OP在测试中试图断言的。这也更易于维护 - 没有硬编码的属性名称作为字符串,也没有在测试方法中进行单个属性检查。 - Evan Mulawski