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

条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数。

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 回答