使用 FluentAssertion 时 Visual Studio 警告 CA1806 的错误识别(不要忽略方法结果)

Posted

技术标签:

【中文标题】使用 FluentAssertion 时 Visual Studio 警告 CA1806 的错误识别(不要忽略方法结果)【英文标题】:Incorrect identification of Visual Studio warning CA1806 (Do not ignore method results) when using FluentAssertion 【发布时间】:2020-11-02 20:47:42 【问题描述】:

我正在 Visual Studio 2019 中编写 C# 单元测试。我正在使用带有 FluentAssertion 的 Xunit。

其中一个测试中的两行主要代码(用于说明目的)是:

Action a = () => new SomeClass(null);
a.Should().Throw<ArgumentNullException>();

但是,这会导致编译器 CA1806 警告: “Ctor_WhenInvalidArgs_ThenThrowException 创建了一个从未使用过的 SomeClass 的新实例。将实例作为参数传递给另一个方法,将实例分配给变量,或者在不需要时删除对象创建。”

如何在仍然使用 FluentAssertion 的同时解决警告以确保构造函数抛出正确的异常?

【问题讨论】:

【参考方案1】:

当创建SomeClass 类的新实例时,您最终会创建一个函数,构造函数“返回”一个新实例。但是,你将它分配给一个动作,所以“结果”被忽略了。

改用Func&lt;T&gt;,CS1806 就消失了。

Func<SomeClass> f = () => new SomeClass(null);
f.Should().Throw<ArgumentNullException>();

【讨论】:

以上是关于使用 FluentAssertion 时 Visual Studio 警告 CA1806 的错误识别(不要忽略方法结果)的主要内容,如果未能解决你的问题,请参考以下文章

FluentAssertion : 用私有内部对象列表断言对象相等

如何使用 FluentAssertion 测试一个对象是不是等同于另一个已设置属性 solidcolorbrush 的对象

检查 FluentAssertion 异常语法中的返回值

FluentAssertion - 向 if 语句添加断言

如何创建自定义 FluentAssertion 错误消息?

如何检查是不是可以在 Fluent Assertion 中使用 ContainValue 验证类型类的字典