【问题标题】:C# 9/10 top-level statements and ExcludeFromCodeCoverage-Attribute?C# 9/10 顶级语句和 ExcludeFromCodeCoverage-Attribute?
【发布时间】:2023-01-27 04:10:38
【问题描述】:

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

[ExcludeFromCodeCoverage]
public static class Program
{
    public static void Main(string[] args)
    {
       // do something awesome
    }
}

但是对于top-level statements,我不知道该如何处理。似乎无法设置属性,正如我在这里找到的:https://stackoverflow.com/a/69962982/1099519

到目前为止,我坚持经典的 Class 声明,但也许他们考虑了其他事情,当涉及到单元测试代码覆盖率时?

【问题讨论】:

    标签: c# code-coverage c#-9.0 c#-10.0 toplevel-statement


    【解决方案1】:

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

    [ExcludeFromCodeCoverage]
    public partial class Program { }
    

    请注意,在初始功能规范(针对 C# 9)states 中,编译器使用的实际名称依赖于实现,但由于 C# 10 和 NET 6 使用分部类是 unit testing ASP.NET Core 应用程序的推荐方法之一使用顶级语句。

    但我个人会说,如果你需要这样的“高级”场景,你应该切换回“普通的”Program类。

    【讨论】:

    • 那感觉糟透了。您如何处理使用 partial 关键字所暗示的部分的另一部分?
    • @RobertHarvey 什么是“其他部分”?由编译器生成的包含顶级语句中定义的所有内容的那个?
    • 好吧,也许我太老了,但是当我在一个类上使用 partial 时,您的源代码中总是有另一个同名的类,上面有 partial 绰号。否则,为什么要用partial,除非这只是解决手头问题的一些技巧?
    • @RobertHarvey 如果您不将patial 添加到Program 类,则由于编译器生成的Program 类与程序员声明的类之间存在冲突,因此不会编译。
    • 你帖子的最后一句话是个好建议。这是仅使用传统类声明的一个很好的用例。
    猜你喜欢
    • 2021-12-25
    • 2022-01-23
    • 2021-03-17
    • 1970-01-01
    • 2023-01-26
    • 2012-01-14
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多