gpt4 book ai didi

c# - CA1822 在 Release模式下错误地应用于 [TestMethod] 异步任务方法?

转载 作者:行者123 更新时间:2023-11-30 18:19:30 27 4
gpt4 key购买 nike

我正在使用自定义规则集,该规则集错误地打开了 CA1822。

我有一个 TestMethod,它是异步的,所以它返回一个任务。此方法不使用任何字段,因此代码 Analysis flags 规则 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.

我是不是遗漏了什么规则?或者这只是一个角落没有经过测试的情况?

多试了几个条件,好像只是release模式的问题。在 Debug模式下,它从不标记 CA1822。如果我的 testMethod 不是异步的,则该规则永远不会应用于调试或 Release模式。

所以我想我应该提到这是在 studio 2015 enterprise RC3 中。

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

最佳答案

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

我个人已为大多数项目关闭此规则。在许多情况下,它会导致糟糕的面向对象设计,即使它执行得更快一些。文档中的小评论:

In some cases, the failure to access the current object instance represents a correctness issue.

这通常是一个更正确的评论,尽管它不适用于这种情况。

关于c# - CA1822 在 Release模式下错误地应用于 [TestMethod] 异步任务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com