代码抛出异常后缺少关闭括号的代码覆盖率

4
在Visual Studio 2017中,一个在抛出异常语句后面的闭合括号被认为是未覆盖的。
在我的情况下,我有一个测试检查是否抛出了NullReferenceException:
[Fact]
public void PassingNullConsoleWriter_ThrowsArgumentNullException()
{
    Assert.Throws<ArgumentNullException>(() => new UsagePrinter(null));
}

在这段代码中分析代码覆盖率时,将整个lambda函数体标记为未覆盖,这显然是不正确的:

Code Coverage marks body of lambda uncovered

将lambda扩展为语句lambda后,可以发现实际上是在抛出异常的语句后面的闭合括号被认为是未覆盖的:

Code Coverage marks the closing brace uncovered

请注意,两种情况下文件的总体覆盖范围相同。

我能做些什么来解决这个问题吗?


你不应该在测试上运行代码覆盖率,而是应该在测试运行的代码上运行代码覆盖率。 - Kritner
1
您所有的测试程序集可能会受益于 [ExcludeFromCodeCoverage] - Kritner
@Kritner,感谢您的评论。当然,我可以(也可能会)这样做。但是我想涵盖测试组件,以揭示未使用的测试基础设施代码。 - paulroho
1
检查测试代码覆盖率有助于识别未按预期运行的测试部分。 - Doug Domeny
1个回答

1
这个怎么样?
[Fact]
public void PassingNullConsoleWriter_ThrowsArgumentNullException()
{
    var exception = Record.Exception(() => new UsagePrinter(null));
    Assert.IsType<ArgumentNullException>(exception);
}

1
谢谢您的建议,但结果基本相同。闭合括号仍然被视为未覆盖。因此,我将采用您描述的其他方法之一。 - paulroho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接