VS Code Coverage不会仅识别可能的Expression Lambda Path

时间:2016-03-15 15:25:05

标签: linq visual-studio unit-testing lambda code-coverage

我有以下扩展方法,它只是对Linq.Any()

的否定

enter image description here

这两个UnitTests完全测试它

[TestMethod]
public void EnumerableExtensions_None_WithMatch()
{
    Assert.IsTrue(_animals.None(t => t.Name == "Pony"));
}

[TestMethod]
public void EnumerableExtensions_None()
{
    var emtpyList = new List<Animal>(); { };

    Assert.IsTrue(emtpyList.None());
}

正如您在图片中看到的,当我运行代码覆盖率分析时,由于延迟执行,代理主体未被覆盖(白色选择)。

这个问题接近问题: Code Coverage on Lambda Expressions

但是并没有完全解决它:由于List必须保持空白,因此不可能真正进入那段代码。

我很想用[ExcludeFromCodeCoverage] ...

标记片段

你会如何编写UnitTest?

2 个答案:

答案 0 :(得分:1)

当您提供{em>非空 None()列表时,您需要测试false返回Animal。实际上,您永远不会执行默认的lambda表达式。

你甚至可能会发现一个错误......

答案 1 :(得分:1)

这是编写测试的正确方法。甚至发现了一个错误!

public void EnumerableExtensions_None()
{
    // _animals HAS entries
    Assert.IsFalse(_animals.None());
}

代码覆盖率100%!

enter image description here