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

时间:2014-06-10 23:04:09

标签: c# .net code-coverage mstest

请考虑以下代码:

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%覆盖?

解答:

不包括结束花括号,因为代码将始终抛出异常并且永远不会到达方法的末尾。

How do I obtain 100% coverage when an exception is thrown in a unit test?

因此,为了获得100%的覆盖率,您需要排除检查异常的测试方法。烦。

EDIT1:删除了不相关的流畅断言。 EDIT2:删除了不相关的泛型。

2 个答案:

答案 0 :(得分:2)

不包括结束花括号,因为代码将始终抛出异常并且永远不会到达方法的末尾。

How do I obtain 100% coverage when an exception is thrown in a unit test?

因此,为了获得100%的覆盖率,您需要排除检查异常的测试方法。烦。

答案 1 :(得分:0)

将代码转换为如下所示,当然如果它是一行。

public IConverter GetConverter() throw new ArgumentException();