MSTest Shows Partial Code Coverage on Compound Boolean Expressions
c#, code-coverage, mstest, unit-testing
Solution
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.
Problem
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.