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

C# NUnit:在断言中使用对象之前,我应该检查对象是否不为null吗?,c#,nunit,C#,Nunit,我正在编写一个调用可能返回null的方法的测试。在这个特定的测试中,返回的对象不能为null,并且它的某些属性必须与特定的值匹配。例如: var obj = thing.GetObject(); Assert.That(obj, Is.Not.Null); Assert.That(obj.Name, Is.EqualTo("Name")); 这是我的C++习惯,在使用指针之前,通常会有一个断言,因为访问NULL会崩溃单元测试(并且您希望避免这样做)。然而,在C#中,访问空对象是一个正常的例外。

我正在编写一个调用可能返回null的方法的测试。在这个特定的测试中,返回的对象不能为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

我不是这方面的权威,但我认为如果您断言它不是null,而不是让它抛出异常,那么您将得到更有意义和一致的测试结果消息。我在自己的单元测试中做了这件事,这是值得的


NullReferenceException
表示您遗漏了某些内容。在测试属性之前断言结果不为null,这并不意味着缺少某些东西。

我想这取决于情况

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

在实际测试中,您已经完成了设置,并且应该知道您期望的结果。在这种情况下,测试它,就像您所做的那样


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

投票关闭的人:为什么?