代码之家  ›  专栏  ›  技术社区  ›  Catskul

为什么“断言”类有这么多看似多余的方法?什么时候使用?

  •  6
  • Catskul  · 技术社区  · 15 年前

    所以我看到assert有几十种方法,它们看起来本质上做的是相同的事情。

    Assert.IsFalse(     a == b );
    Assert.IsTrue(      a != b );
    Assert.AreNotEqual( a,   b );
    

    为什么?只是为了更明确一点吗?什么时候应该使用各种方法?是否有正式的最佳实践文档?

    6 回复  |  直到 15 年前
        1
  •  8
  •   Instance Hunter    15 年前

    两者之间的区别 IsFalse IsTrue 是可读性。 AreNotEqual 允许在测试失败时显示更好的错误消息。 特雷西 例如,只会告诉你答案应该是正确的,而实际上是错误的。 无节制的 将显示在其错误消息中比较的两个值。

        2
  •  8
  •   Oded    15 年前

    简短回答:为了可读性。

    稍微长一点的回答:

    您的测试也是代码,就目的而言,和您测试的代码一样重要。因此,您希望尽可能清楚地说明测试的意图。有时这意味着你要用 IsFalse 有时意味着使用 IsTrue .

        3
  •  4
  •   Reed Copsey    15 年前

    这三种方法有三个不同的、具体的目标。测试的目标是为代码提供清晰的验证和确认。通过使用可能的最清晰和最具体的方法,您将使您的测试成为可能的最小测试,具有可能的最具体、最清晰的含义。

    这有助于提高清晰度——具体来说,您可以看到一个测试在更具声明性的性质下应该做什么,在多个测试场景中使用相同的方法(每个场景都有不同的含义),需要更多地理解代码本身,而不是测试的性质。

    在这种情况下,第三个是(唯一)合适的。但是,如果您遇到这种情况,您将使用另一种情况,例如:

    Assert.IsTrue( myClass.MethodThatReturnsTrue() );
    

    您应该使用对您的目标提供最清晰的方法-如果要检查两个值是否相等,请使用 Assert.IsEqual ,如果要检查布尔值以验证它是否为假,请使用 Assert.IsFalse . 这使得错误报告有意义和可理解。

        4
  •  1
  •   Dean J    15 年前

    它使错误最容易读取;使用与代码最匹配的错误。

    在这种情况下,使用3。

        5
  •  1
  •   Brian Leahy    15 年前

    因为你可以超载==和!这就是原因。

        6
  •  1
  •   Nick    15 年前

    它被称为“流畅的界面”…使事物在许多人看来更具可读性。