为什么代码覆盖率在检查异常时没有报告100%的测试代码覆盖率?

4
考虑以下代码:
public interface IConverter
{
}

public class ConverterFactory
{
    public IConverter GetConverter()
    {
        throw new ArgumentException();
    }
}

[TestClass]
public class ConverterFactoryTests
{
    [TestMethod]
    [ExpectedException(typeof(ArgumentException))]
    public void GetConverterShouldThrowExceptionWhenConverterNotRegistered()
    {
        var factory = new ConverterFactory();
        factory.GetConverter();
    }
}

为什么代码覆盖率报告显示测试方法没有完全覆盖?
答案:由于代码总是会抛出异常而从未到达方法结尾,因此关闭右大括号未被覆盖。 如何在单元测试中抛出异常时获得100%的覆盖率? 因此,似乎要获得100%的覆盖率,您需要排除检查异常的测试方法。很烦人。
编辑1:删除了流畅的断言,因为不相关。 编辑2:删除了泛型,因为不相关。

出于好奇,如果您手动调用操作,它是否会被捕获?当反射调用任何内容或未在您的代码中特别调用时,代码覆盖工具会丢失。 - TyCobb
我更新了问题,似乎与流畅的断言完全无关。 - Hawk
2个回答

3

0

将代码转换为以下形式,当然,如果是一行的话。

public IConverter GetConverter() throw new ArgumentException();

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