luk*_*fer 10 c# unit-testing mstest code-coverage
从微软的文档中,部分覆盖的代码是"......其中一些代码块没有被执行." 我非常难过这个(简化为简洁):
鉴于此方法:
public List<string> CodeUnderTest()
{
var collection = new List<string> { "test1", "test2", "test3" };
return collection.Where(x => x.StartsWith("t") && x == "test2").ToList();
}
Run Code Online (Sandbox Code Playgroud)
而这个测试:
[TestMethod]
public void Test()
{
var result = new Class1().CodeUnderTest();
CollectionAssert.Contains(result, "test2");
}
Run Code Online (Sandbox Code Playgroud)
代码覆盖率结果显示表达式x.StartsWith("t") && x == "test2
仅部分涵盖.除非编译器或CLR有某种急切的条件匹配东西,否则我不确定这是怎么可能的,但也许我只需要解释它.
Sha*_*lde 14
条件AND运算符(&&)执行其bool操作数的逻辑AND,但仅在必要时才计算其第二个操作数.
http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.100).aspx
所以你会期望双方都被覆盖
也许它抱怨的是你没有测试-ve路径,即你的收藏是否
var collection = new List<string> { "test1", "test2", "test3", "not_this_one" };
Run Code Online (Sandbox Code Playgroud)
这样你就可以测试x.StartsWith("t")
T/F,因为目前只有T路径正在测试该条件.