12

Microsoft のドキュメントによると、部分的にカバーされたコードは「... 行内のコード ブロックの一部が実行されなかった場所」です。私はこれにかなり困惑しています(簡潔にするために簡略化しています):

この方法を考えると:

public List<string> CodeUnderTest()
{
    var collection = new List<string> { "test1", "test2", "test3" };
    return collection.Where(x => x.StartsWith("t") && x == "test2").ToList();
}

そして、このテスト:

[TestMethod]
public void Test()
{
    var result = new Class1().CodeUnderTest();
    CollectionAssert.Contains(result, "test2");
}

コード カバレッジの結果は、式x.StartsWith("t") && x == "test2が部分的にしかカバーされていないことを示しています。コンパイラまたは CLR にある種の熱心な条件一致機能がない限り、それがどのように可能かはわかりませんが、説明が必要なだけかもしれません。

4

1 に答える 1

15

条件付き AND 演算子 (&&) は、bool オペランドの論理 AND を実行しますが、必要に応じて 2 番目のオペランドのみを評価します。

http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.100).aspx

したがって、両側がカバーされることが期待されます

おそらくそれが不平を言っているのは、-veパスをテストしていないことです。つまり、コレクションが

var collection = new List<string> { "test1", "test2", "test3", "not_this_one" };

この方法x.StartsWith("t")で T/F をテストします。これは、現在、T パスのみがその条件についてテストされているためです。

于 2012-10-18T23:50:26.820 に答える