LINQ投影的代码覆盖率

时间:2012-09-11 19:06:19

标签: c# visual-studio code-coverage

我的应用程序中有以下几行代码,我不知道为什么但Code Coverage告诉我它没有被覆盖:

var filters = from f in request.Filters
              select new FilterDTO
              {
                   FilterName = f.name,
                   Value = f.value
              };

var filteredItems = repo.GetFilteredItems(filters);

它认为未涵盖以下几行:

select new FilterDTO
{
    FilterName = f.name,
    Value = f.value
};

其余部分100%覆盖。我的单元测试是为request.Filters创建一个非空的集合,所以我知道它正在进行正确的投影,但代码仍然被认为没有被覆盖。

有没有人知道为什么感觉只是查询的选择部分被代码覆盖范围覆盖?

1 个答案:

答案 0 :(得分:1)

分析器可以告诉你什么是什么和什么不执行的大部分内容都是基于编译器在调试信息中告诉它的内容。

select new FilterDTO
{
    FilterName = f.Name,
    Value = v.Value
}

..是一个lambda,编译器将其转换为生成的类上的方法。此外,初始化器语法转换为类似

的语法
var x = new FilterDTO();
x.FilterName=f.Name;
x.Value = v.Value;
return x;

调试器在逐步执行这样的代码时非常糟糕,因此,编译器可能只是为分析器或调试器生成了足够的信息。