PEX:你如何测试pex中的相等方法?

时间:2010-09-20 10:13:54

标签: unit-testing behavior pex

所以我在这里玩PEX,这似乎是一个好主意。

但是我遇到了一些问题,例如我无法使用参数单元测试来测试equals方法。

也许没有办法,也许这是我还没想到的一种技术。

有人必须有一个不错的主意。

例如,如果我在moq中执行此操作,我将确保读取两个对象上的所有属性并自行进行比较以验证它们。但是我没有看到如何在参数化测试中使用这种方法。

问题是我需要验证方法调用是否已在业务逻辑中设置/读取属性。我不知道如何在PEX中做到这一点,并且那里没有大量的文档。

1 个答案:

答案 0 :(得分:1)

您可以检查一些与平等的数学定义相关的基本属性:

  • 不会崩溃:a == b从不抛出异常
  • 对称:(a == b)==(b == a)
  • 反身:( a == a)== true
  • 传递性:(a == b)&& (b == c)==> a == c
  • 给定Func f,a == b ==> f(a)== f(b)

所有这些都很好,但绝对不能保证你的平等有效。但有一点你会指定断言对你来说平等意味着什么。例如,属性P的值应该相等,等等......最终,您将最终得到相等的第二个规范作为测试。

当你用GetHashCode调查关系时,事情会变得更加有趣:

  • a.GetHashCode()!+ b.GetHashCode()==> a!= b
  • idempotent:a.GetHashCode()== a.GetHashCode()