c# - 是否有必要在单元测试中启用可空上下文?

标签 c# unit-testing nullable

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

我正在尝试防止 NullReferenceException .

我已将以下设置添加到所有项目:

<Nullable>enable</Nullable>

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

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

viewModel为可能的 null 加下划线引用。

我认为为单元测试启用这个功能是没有用的。当你编写单元测试时,你设置了条件 - 所以你知道是否有东西是 null .

而不是把“!” (该死的)运算符无处不在告诉编译器我确定它不为空,我相信我应该删除 <Nullable>enable</Nullable>来自测试项目的设置。

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

最佳答案

假设您的单元测试项目与正在测试代码的项目是分开的,设置应该至少与正在测试的项目的配置相匹配。

如果在被测试的项目中启用了可为空的引用类型,那么为单元测试启用它没有坏处。

然而,可空引用类型在正在测试的项目中被禁用并在单元测试项目中被启用,这可能会导致单元测试通过但单元测试代码中存在错误(例如空引用异常)的情况正在测试。

当代码中存在问题时,您永远不希望单元测试通过,因为它们的全部意义在于提醒您注意代码中的问题。

最安全的选择是在单元测试项目中禁用可为空的引用类型,而不管被测试项目中的设置如何。这样,如果设置发生更改,您将受到保护。

关于c# - 是否有必要在单元测试中启用可空上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72813659/

相关文章:

对带有输入的方法进行 Java 单元测试

c# - 类型 'string' 必须是不可为 null 的类型才能将其用作泛型类型或方法 'System.Nullable<T>' 中的参数 T

c# - 为什么递增 Nullable<int> 不会抛出异常?

c# - 为 GridView 的 PagerTemplate 动态生成页面链接按钮

c# - 如何在 .NET 版本上发展 .NET 代码库

c# - 尝试解析日期时出错

c# - 可空非引用类型变量是否需要 new()?

c# - 非自托管网络服务的问题

unit-testing - 将 asp.net 5 测试放在单独的程序集中

JavaScript 单元测试