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

问题描述 投票:1回答:2

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

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

这是我的C ++习惯,在使用指针之前,您通常会先声明一个断言,因为访问null可能会使单元测试崩溃(并且您希望避免这样做)。但是,在C#中,访问空对象是一个正常的例外。如果执行上述操作,或者只是继续访问对象并依靠异常(如果对象为null,则使测试案例失败),是一种好习惯吗?如:

var obj = thing.GetObject();
Assert.That(obj.Name, Is.EqualTo("Name")); // Throws if `obj` is null
c# nunit
2个回答
1
投票

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

A NullReferenceException表示您错过了某些东西。在测试属性之前断言结果不为null是[[not缺少某些内容。


0
投票
恐怕要看情况。

在您提供的示例中,没有初始设置,但是您声明所调用的方法有时可能返回null。没有该设置,您将无法测试null或non-null,因为(如上所述)都可以。这样的测试没有用。

OTOH在实际测试中,您将完成设置,实际上应该

知道您希望得到什么结果。在这种情况下,请像完成操作一样对其进行测试。

您还应该进行测试,将对象设置为返回null并对此情况进行测试。
© www.soinside.com 2019 - 2024. All rights reserved.