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
}

..はラムダであり、コンパイラはそれを生成されたクラスのメソッドに変換します。また、初期化構文は次のようなものに変換されます

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

デバッガーは、そのようなコードをステップスルーするのが苦手なことで有名です。そのため、コンパイラーがプロファイラーまたはデバッガー用に十分な情報を生成している可能性があります。

于 2012-09-11T19:17:27.330 に答える