MSTest Shows Partial Code Coverage on Compound Boo

2019-04-20 19:14发布

问题:

From Microsoft's documentation, partially covered code is "...where some of the code blocks within the line were not executed." I'm pretty stumped on this one (simplified for brevity):

Given this method:

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

And this test:

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

Code coverage results shows that the expression x.StartsWith("t") && x == "test2 is only partially covered. I'm not sure how that's possible unless the compiler or CLR has some sort of eager condition matching stuff, but maybe I just need to have it explained.

回答1:

The conditional-AND operator (&&) performs a logical-AND of its bool operands, but only evaluates its second operand if necessary.

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

so you would expect both sides to be covered

perhaps what it is complaining about is that you haven't tested the -ve paths i.e. if your collection is

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

this way you test the x.StartsWith("t") being T/F because currently only the T path is being tested for that condition.