繁体   English   中英

与对象比较哪种方法更好/更合适?

[英]Which way is better/proper to compare to objects?

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

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

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

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

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

B,

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

目前,我有两个想法。 我已经读过一些关于比较的文章,并且我不想使其变得比需要的更为复杂。 我的意思是,实现IComparable接口,覆盖GetHashCode方法。 另一方面,我不确定DTO类是否实现用于测试的接口会很好。

也许我没有读足够的书,或者我太接近这个问题了。 我想请您回顾一下我的两种可能的方法-我绝对不确定它们是否正确-如果您知道有关此问题的文章,请与我分享。 我不需要现有的解决方案-不熟练地使用他人的代码不是我的方式-我需要提示要去哪里。

文章:

谢谢您的帮助!

为了比较对象本身,您应该覆盖Equals()方法。 如果在某个时间点您的对象可能被用作Dictionary或类似内容中的键的可能性很小,则也重写GetHashCode()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM