我正在编写使用specflow测试REST服务的测试。测试的主题是检查我从服务中获得的列表是否包含正确的对象。
我在后台部分有样本数据,每次运行时都会将数据放入数据库中,每次运行后都会清理它。关键是我知道数据库中的确切数据,并且应该比较对象是DTO类。
在我的测试中有一点我需要比较请求调用的结果(反序列化的JSON字符串到List<DTOObject>
)REST服务URL和测试数据(填充List<DTOObject>
)。所以,我有两个List<DTOObject>
。问题是比较它们哪种方式更好?
A,我写了一个通用比较器类(我不希望我的测试库和应用程序之间存在依赖关系),步骤是
B,
目前我有两个想法如何做到这一点。我已经阅读了一些关于比较的文章,我不想让它比需要的更复杂。我的意思是,实现IComparable接口,覆盖GetHashCode方法。另一方面,如果DTO类实现了一个测试界面,我不确定会不会很好。
也许我读得不够,或者我太接近问题了。我想问你的是审查我的两种可能方法 - 我肯定不确定它们是否正确 - 如果你知道一篇关于这个问题的文章,请与我分享。我不需要现有的解决方案 - 无脑地使用其他代码不是我的方式 - 我需要提示去哪里。
文章:
提前感谢您的帮助!
答案 0 :(得分:0)
要比较对象本身,您应该覆盖Equals()
方法。
如果在某个时间点你的对象可能被用作词典中的键或类似的东西,那么也会覆盖GetHashCode()
。
然后,您可以使用Enumerable.SequenceEqual()
检查两个列表的相等性。
您可以创建Equals
并将其传递给IEqualityComparer<DTOObject>
调用,而不是在对象上实现SequenceEqual
,但我认为实现Equals
是更通用的方法。