CA1822错误地应用于Release Mode中的[TestMethod]异步任务方法

本文关键字:TestMethod 异步 任务 方法 中的 错误 应用于 Release Mode CA1822 | 更新日期: 2023-09-27 17:59:05

我正在使用一个自定义规则集,其中CA1822已作为错误打开。

我有一个TestMethod,它是异步的,所以它返回一个Task。此方法不使用任何字段,因此代码分析标记CA1822规则,将其标记为静态。但是MSTest不能调用静态异步任务方法(未在测试资源管理器中列出)。因此,这似乎是代码分析逻辑中的一个缺陷。我对C#还很陌生,所以我尽我所能遵循代码分析,当我觉得应该违反规则时,我会进行抑制。但这是我第一次发现自己认为这个规则完全错误。

[TestMethod]
public async Task TestMethod1()
{
    await Task.Delay(10);
}

Severity    Code    Description Project File    Line    Suppression State
Error   CA1822  The 'this' parameter (or 'Me' in Visual Basic) of 'UnitTest1.TestMethod1()' is never used. Mark the member as static (or Shared in Visual Basic) or use 'this'/'Me' in the method body or at least one property accessor, if appropriate.   

我是不是遗漏了一些规则?或者这只是一个角落如果没有测试?

尝试更多的条件,这似乎只是发布模式中的一个问题。在调试模式下,它从不标记CA1822。如果我的testMethod不是异步的,那么该规则永远不会应用于调试或发布模式。

所以我想我应该提到这是在工作室2015企业RC3。

对我来说,这表明这是规则集中的一个特例,但我想听听其他人的想法。

CA1822错误地应用于Release Mode中的[TestMethod]异步任务方法

规则来自性能集,从性能角度来看,将规则设置为静态会更快。可能有1000个原因,这是一种单元测试方法,在本例中就是其中之一,可能会导致您不应用此规则。

我个人对大多数项目都关闭了这个规则。在许多情况下,它会导致糟糕的面向对象设计,即使执行速度稍快。来自文档的小评论:

在某些情况下,无法访问当前对象实例表示存在正确性问题。

一般来说,这是一个更正确的说法,尽管它不适用于这种情况。