我有一个Asp.net Core 6 Web Api项目.

我正在努力抵抗NullReferenceException人.

我为所有项目添加了以下设置:

<Nullable>enable</Nullable>

我已经修复了代码库,但在单元测试和集成测试中收到警告:

**viewModel**.Message.Should().Be("Aaaa");

viewModel下划线表示可能的null参考.

我认为为单元测试启用此功能是无用的.当你编写单元测试时,你设置了条件——这样你就知道什么是null.

而不是把"!"(damnit)运算符,告诉编译器我确定它不是null,我认为我应该从测试项目中删除<Nullable>enable</Nullable>设置.

有人看到<Nullable>enable</Nullable>应该留在单元测试项目中的有效理由吗?

推荐答案

最后,我决定在测试项目中使用以下设置:

<Nullable>annotations</Nullable>

因为如here所述,它将禁用空引用警告,但它也允许我在测试中使用T?类型.由于我有伪值,我传递给我故意为其赋值的方法,我想有自由将它们声明为T?

IEnumerable<Foo>? collection = null;
a.DoSomething(collection); 

我决定不使用注释,因为它不允许我将变量声明为T?.

Csharp相关问答推荐

Plotly.NET访问互联网时出现异常

为什么我不能更改尚未设置的模拟对象属性的值?

C#使用属性和值将JSON转换为XML

C#自定义字典与JSON(de—)serialize

try 还原包时出错:Dapper已经为System.Data.SQLClient定义了依赖项''''

为什么总输出就像12.3没有一分一样?

不带身份的Blazor服务器.Net 8 Cookie身份验证

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

在ASP.NET Core Web API项目中通过中间件修改`Request.Path`不会更改使用的控制器/操作

TeamsBot SendActivityActivityTypes与ActivityTypes同步.键入不再起作用

将类移动到新命名空间后更新RavenDB Raven-Clr-Type

在Docker容器中运行API项目时,无法本地浏览到index.html

无法将生产环境的AppDbContext设置替换为用于集成测试的内存数据库

Blazor Fluent UI DialogService,<;FluentDialogProvider/>;错误

VS 2022与VS 2019:如何/为什么创建额外的任务?

使用switch 类型模式时出现奇怪的编译器行为

为什么我的伺服电机不动,下面的代码?

岛屿和框架中的自定义控件库.Navigate-AccessViolationException

如何使用moq和xUnit对删除操作进行单元测试?

阻止CLR释放已封送的双字符指针的内存?