c# - 如何从代码覆盖中排除属性中的 lambda 函数?

标签 c# unit-testing c#-4.0 code-coverage

我正在尝试为我的 C# 应用程序收集一些良好的代码覆盖率统计信息,但我想忽略生成的 SubSonic 类,因为收集这些函数的代码覆盖率统计信息没有实际意义。

我已经编辑了 ActiveRecord.tt 文件以在每个方法和属性上包含 [ExcludeFromCodeCoverage] 属性,这已经删除了我的代码覆盖率窗口中的大部分不相关结果。但是,尽管具有代码覆盖排除属性,属性中的 lambda 表达式仍被标记为未覆盖。例如:

[ExcludeFromCodeCoverage]
int GetValue
{
    get
    {
        this.SomeMethod(); // this is excluded
        return this.Find(x => x.Value == this._Value); // this.Find is excluded
                                                       // but x => x.Value == ...
                                                       // is not.
    }
}

这只发生在属性中。正如预期的那样,Lambda 表达式在方法中被忽略。

现在,对我来说,这很烦人,但不一定是致命的,因为我可以在浏览代码覆盖列表时忽略这些表达式。但是客户要求我们的代码覆盖率要达到95%以上。

我可以自动生成单元测试以及 ActiveRecord.tt 文件,但这并不理想。

感谢您的宝贵时间。

最佳答案

虽然我不确定您使用什么工具进行单元测试,但您可以尝试将属性移到 get 方法声明的顶部:

int GetValue
{
    [ExcludeFromCodeCoverage]
    get
    {
        this.SomeMethod();
        return this.Find(x => x.Value == this._Value);
    }
}

这是因为在编译时,GetValue 属性被转换为一个方法,带有签名 get_GetValue : int

关于c# - 如何从代码覆盖中排除属性中的 lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3637169/

相关文章:

c# - DryIoc - 使用 ID 注册多个实例

XML 导航和读取使用 C# 4.0 动态?

c# - 查找没有根元素的节点值

C# Dapper 在 SQL Server 2016 中使用 JSON_VALUE

c# - 单元测试与任务一起永远运行

Python模拟全局变量

c# - 从数据集中获取 byte[] 并压缩

c# - 非托管导出,将字符串数组从 C++ 传递到 C#

c# - 一列的 DataGridview 单元格不能有不同的类型

Django 的 self.client.login(...) 在单元测试中不起作用