【发布时间】:2022-08-08 12:44:04
【问题描述】:
Assert.NotNull(res);
Assert.Equal(1, res.Foo); // CS8602 warning here
我正在使用 xunit.assert 2.4.1、.NET 6.0、VS 2022。
当 \"Ctrl+Click\" 导航到 Assert.NotNull() 源代码时,我可以看到它定义为
public static void NotNull(object @object)
而我实际上期待看到
public static void NotNull([NotNull] object? @object)
从 xunit 源代码可以看出,只有在启用XUNIT_NULLABLE 条件编译变量时才使用可空的方法。是 nuget 下载了 xunit.assert 包的“不可为空”版本吗?我们如何强制使用“可空”版本(使用定义的 XUNIT_NULLABLE 构建)?
-
这与 XUnit 无关。 C# 编译器告诉您,此时该值仍然可以为空。
-
@scottdavidwalker,我想你误解了我的问题。 C# 编译器肯定会生成警告,但它这样做是因为
Assert.NotNull()不会阻止编译器发出警告。您可以创建自定义 NotNull() 方法private void NotNull([NotNull] object? @object) {}并使用它来使编译器静音,那么为什么 NUnitAssert.NotNull()不能这样做呢?实际上它可以,请点击我在问题中分享的链接,也许你会得到我的问题。 -
它是 v3 的一部分。 github.com/xunit/xunit/issues/2011 我认为 nuget 包是在没有设置标志的情况下编译的,所以我们还没有那个能力。
标签: xunit nullable-reference-types