哪种方式比对象更好/更合适?

时间:2014-03-04 12:14:47

标签: c# compare

我正在编写使用specflow测试REST服务的测试。测试的主题是检查我从服务中获得的列表是否包含正确的对象。

我在后台部分有样本数据,每次运行时都会将数据放入数据库中,每次运行后都会清理它。关键是我知道数据库中的确切数据,并且应该比较对象是DTO类。

在我的测试中有一点我需要比较请求调用的结果(反序列化的JSON字符串到List<DTOObject>)REST服务URL和测试数据(填充List<DTOObject>)。所以,我有两个List<DTOObject>。问题是比较它们哪种方式更好?

A,我写了一个通用比较器类(我不希望我的测试库和应用程序之间存在依赖关系),步骤是

  • 传递方法名称(例如合作伙伴名称)
  • 从任一列表中获取一个项目并调用该方法以获取具体数据以在另一个对象列表中查找相同的对象
  • 让具体数据循环通过另一个集合并在列表中的每个对象上调用给定方法并比较我在上一步中得到的结果
  • 如果找到所需的类,则使用equals方法
  • 进行比较

B,

  • 从任一列表中取一个项目
  • 循环浏览另一个列表,并使用equals方法将每个项目与我在上一步中获得的项目进行比较

目前我有两个想法如何做到这一点。我已经阅读了一些关于比较的文章,我不想让它比需要的更复杂。我的意思是,实现IComparable接口,覆盖GetHashCode方法。另一方面,如果DTO类实现了一个测试界面,我不确定会不会很好。

也许我读得不够,或者我太接近问题了。我想问你的是审查我的两种可能方法 - 我肯定不确定它们是否正确 - 如果你知道一篇关于这个问题的文章,请与我分享。我不需要现有的解决方案 - 无脑地使用其他代码不是我的方式 - 我需要提示去哪里。

文章:

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

要比较对象本身,您应该覆盖Equals()方法。 如果在某个时间点你的对象可能被用作词典中的键或类似的东西,那么也会覆盖GetHashCode()

然后,您可以使用Enumerable.SequenceEqual()检查两个列表的相等性。 您可以创建Equals并将其传递给IEqualityComparer<DTOObject>调用,而不是在对象上实现SequenceEqual,但我认为实现Equals是更通用的方法。