【问题标题】:PEX: How would you test an equality method in pex?PEX:您将如何在 pex 中测试相等方法?
【发布时间】:2010-09-20 10:13:54
【问题描述】:

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

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

也许没有办法,也许是我还没弄明白的技术。

一定有人有个好主意。

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

问题是我需要验证在我的业务逻辑中是否进行了方法调用和属性设置/读取。我不知道如何在 PEX 中执行此操作,也没有大量的文档。

【问题讨论】:

    标签: unit-testing behavior pex


    【解决方案1】:

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

    • 不会崩溃:a == b 永远不会引发异常
    • 对称:(a == b) == (b == a)
    • 自反:(a == a) == true
    • 传递性:(a == b) && (b == c) ==> a == c
    • 给定函数 f,a == b ==> f(a) == f(b)

    所有这些都很好,但绝对不能保证平等有效。但是在某些时候,您将在断言中指定平等对您意味着什么。例如,属性 P 的值应该相等,等等……最终,您将得到第二个相等性规范作为测试。

    当您研究与 GetHashCode 的关系时,事情会变得更有趣:

    • a.GetHashCode() !+ b.GetHashCode() ==> a != b
    • 幂等性:a.GetHashCode() == a.GetHashCode()

    【讨论】:

    • 有趣的答案。我对这个问题的表述很糟糕,但是你已经设法给出了一个非常有帮助的答案,我没有考虑测试这些属性。 GetHashCode 也在我的列表中;)
    • v 迟到的答案,但实际上可能是正确的反思方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多