2012-09-11 28 views
3

我在我的應用程序代碼的下面幾行,我不知道爲什麼,但代碼覆蓋率告訴我,不涵蓋:代碼覆蓋率在LINQ投影

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創建一個非空的集合,所以我知道它正在做投影,但代碼仍然沒有被覆蓋。

有沒有人有任何洞察力,爲什麼只是查詢的選擇部分被認爲沒有覆蓋代碼覆蓋?

+0

Broken code coverage tools?您是否在測試中評估IEnumerable(使用ToList()或類似的方法)或者只是創建它? –

+0

這是Visual Studio 2010最終的默認代碼覆蓋率工具。我認爲它可能在實現中存在缺陷。 – Dismissile

+0

您是否嘗試過Visual Studio 2012以查看它是否有任何不同? –

回答

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; 

調試器是在通過這樣的代碼步進不好是衆所周知的,因此,它可能是編譯器只是用於探查或調試器生成它足夠的信息。