繁体   English   中英

NUnit:在断言中使用对象之前,我是否应该检查对象是否不是 null?

[英]NUnit: Should I check that objects are not null before using them in asserts?

我正在编写一个调用可能返回 null 的方法的测试。 在这个特定的测试中,返回的 object不能是 null 并且它的某些属性必须匹配特定的值。 例子:

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

这是我在 C++ 中的一个习惯,在使用指针之前通常会先进行断言,因为访问 null 可能会使单元测试崩溃(并且您希望避免这样做)。 然而,在 C# 中,访问 null 对象是一个正常的异常。 Is it a good practice to do what I've done above, or just go ahead and access the object and rely on the exception to fail the test case if the object is null? 如:

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

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

NullReferenceException表示您错过了某些内容。 在测试属性之前断言结果不是 null 并没有遗漏一些东西。

这取决于,我害怕。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM