VS Code Coverage 不会只识别可能的表达式 Lambda 路径

VS Code Coverage won't recognize only possible Expression Lambda Path

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

的否定

这两个 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());
}

如图所示,我运行一个代码覆盖率分析时,delegate body没有被覆盖(白选),因为延迟执行。

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

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

我很想用 [ExcludeFromCodeCoverage] 标记该段 ...

你会如何编写单元测试?

当给定 Animal 非空 列表时,您需要测试 None() returns false。实际上,您永远不会执行默认的 lambda 表达式。

您甚至可能会发现错误...

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

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

代码覆盖率 100%!