【问题标题】:NUnit: Should I check that objects are not null before using them in asserts?NUnit:我应该在断言中使用对象之前检查对象是否不为空吗?
【发布时间】:2020-04-15 21:50:16
【问题描述】:

我正在编写一个调用可能返回 null 的方法的测试。在这个特定的测试中,返回的对象必须 not 为 null 并且其上的某些属性必须匹配特定的值。示例:

var obj = thing.GetObject();
Assert.That(obj, Is.Not.Null);
Assert.That(obj.Name, Is.EqualTo("Name"));

这是我在 C++ 中的一个习惯,在使用指针之前,您通常会有一个断言,因为访问 null 会导致单元测试崩溃(并且您希望避免这样做)。然而,在 C# 中,访问空对象是一个正常的异常。做我上面所做的事情是一个好习惯,还是继续访问对象并在对象为空时依靠异常使测试用例失败?如:

var obj = thing.GetObject();
Assert.That(obj.Name, Is.EqualTo("Name")); // Throws if `obj` is null

【问题讨论】:

  • 投票结束的人:为什么?

标签: c# nunit


【解决方案1】:

我在这件事上没有权威,但我认为如果你断言它不为空而不是让它抛出异常,你会得到更有意义和一致的测试结果消息。我在自己的单元测试中这样做,因为它是值得的。

NullReferenceException 表示您错过了什么。在测试属性之前断言结果不为空没有缺少某些东西。

【讨论】:

    【解决方案2】:

    恐怕这取决于。

    在您给出的示例中,没有初始设置,但您声明调用的方法有时可能返回 null。如果没有该设置,您将无法测试空值或非空值,因为(如前所述)两者都是可能的。这样的测试没有用。

    OTOH 在实际测试中,您已经完成了设置并且应该真正知道您期望的结果。在这种情况下,请像您所做的那样对其进行测试。

    您还应该有一个测试,其中对象被设置为返回 null 并针对这种情况进行测试。

    【讨论】:

      猜你喜欢
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多