【问题标题】:Redundant assert statements in .NET unit test framework.NET 单元测试框架中的冗余断言语句
【发布时间】:2010-06-15 21:33:55
【问题描述】:

难道不是每个断言语句都可以翻译成 Assert.IsTrue,因为根据定义,您是在断言某事是真还是假?

为什么测试框架会引入 AreEquals、IsNotNull 等选项,尤其是 IsFalse?我觉得我在编写单元测试时花了太多时间考虑使用哪个 Assert。

【问题讨论】:

    标签: c# .net visual-studio unit-testing nunit


    【解决方案1】:

    如果您愿意,您可以一直使用Assert.IsTrue。不同的是Assert.AreEqual之类的东西会在断言失败时给你更好的错误信息。

    NUnit(可能还有其他框架)现在支持如下语法:

    Assert.That(foo, Is.Equal.To(bar))

    【讨论】:

    • 同意。但是不能提供 IsTrue 覆盖以获得更好的错误消息吗?
    • @Prabhu 你覆盖什么? IsTrue 采用布尔值。 IsTrue(string s) 会做什么?它怎么知道你正在测试平等或其他什么?断言.IsTrue(a
    • 通常有一个 IsTrue(bool condition) 覆盖:IsTrue(bool condition, string errormessage)。 is AreEqual(foo, bar) 比 IsTrue(foo.Equals(bar), string.Format("Expected: {0}\nGot: {1}", foo, bar));此外,按照这种逻辑,整个 Assert 类是不需要的,因为您可以自己抛出异常,因为 Assert 本质上就是这样做的: if (foo != bar) throw new Exception ("Foo doesn't equal Bar");跨度>
    • 更不用说AreEqual优雅地处理空值了。
    【解决方案2】:

    如果您有足够的额外代码,是的,几乎每个Assent.XXX 都可以转换为Assert.IsTrue 调用。但是有一些很难翻译,比如 Throws

    Assert.Throws<ArgumentNullException>(() => x.TestMethod(null));
    

    将其转换为Assert.IsTrue 是可能的,但真的不值得努力。使用Throws 方法要好得多。

    【讨论】:

      【解决方案3】:

      是的,

      AreEqual(obj1, obj2) 基本上是 Assert.IsTrue(obj1.Equals(obj2))。所以,我会说这是真的。

      但也许他们为了可读性而引入了这些重载,例如,很明显他们想要比较两个对象,或者检查一个值是否等于 false。

      【讨论】:

        【解决方案4】:

        这很简单 - 让您的测试代码更具可读性

        哪个更易读

        Assert.IsTrue(quantity > 0)
        

        Assert.That(quantity, Is.GreaterThan( 0 ))
        

        你不觉得第二个选项更具可读性吗?

        【讨论】:

          【解决方案5】:

          您可以使用一个名为 Should 的库来编写与框架无关的断言。它还具有非常好的流畅语法,如果您喜欢流畅的界面,可以使用它。我有一篇与此相关的博客文章。

          http://nileshgule.blogspot.com/2010/11/use-should-assertion-library-to-write.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-03
            • 2014-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-08
            • 1970-01-01
            相关资源
            最近更新 更多