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%!
我有以下扩展方法,它只是 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%!