4

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

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 创建一个非空集合,所以我知道它正在正确地进行投影,但仍然认为代码没有被覆盖。

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

4

1 回答 1

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;

调试器在单步执行这样的代码方面是出了名的糟糕,因此,编译器可能只是为探查器或调试器生成了足够的关于它的信息。

于 2012-09-11T19:17:27.330 回答