C# 9/10 顶级语句和 ExcludeFromCodeCoverage-Attribute?

Dom*_*mon 12 c# code-coverage c#-9.0 toplevel-statement c#-10.0

我通常将该属性设置[ExcludeFromCodeCoverage]为我的 Program 类,因为无论如何都无法对该类进行单元测试(或者也没有意义),因此它不会在覆盖率报告中显示为“缺失”:

[ExcludeFromCodeCoverage]
public static class Program
{
    public static void Main(string[] args)
    {
       // do something awesome
    }
}
Run Code Online (Sandbox Code Playgroud)

但对于高层的声明,我不知道如何处理这个问题。正如我在这里发现的那样,似乎无法设置属性: https: //stackoverflow.com/a/69962982/1099519

到目前为止,我坚持经典的类声明,但也许他们在单元测试代码覆盖率方面考虑了其他事情?

Gur*_*ron 20

自 C# 10 以来,顶级语句生成已更改,现在您可以将partial Program类添加到顶级语句的末尾(或在单独的文件中)并向其添加属性:

[ExcludeFromCodeCoverage]
public partial class Program { }
Run Code Online (Sandbox Code Playgroud)

请注意,在初始功能规范(对于 C# 9)中,编译器使用的实际名称取决于实现,但由于使用分部类的 C# 10 和 NET 6 是单元测试ASP.NET Core 应用程序的推荐方法之一,该应用程序使用 top-级别的陈述。

但我个人想说,如果您需要这种“高级”场景,您应该切换回“普通旧”Program类。

  • 你帖子的最后一句话是很好的建议。对于仅使用传统的类声明来说,这是一个很好的用例。 (3认同)
  • 那感觉很糟糕。您如何处理使用“partial”关键字隐含的部分的其他部分? (2认同)