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

C# 为什么在检查异常时,代码覆盖率不报告测试代码中的100%代码覆盖率?,c#,.net,code-coverage,mstest,C#,.net,Code Coverage,Mstest,考虑以下代码: public interface IConverter { } public class ConverterFactory { public IConverter GetConverter() { throw new ArgumentException(); } } [TestClass] public class ConverterFactoryTests { [TestMethod] [ExpectedExcepti

考虑以下代码:

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%的覆盖率,您需要排除检查异常的测试方法。讨厌

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

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


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

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

public IConverter GetConverter() throw new ArgumentException();

出于好奇,如果您手动调用该操作,它是否会被拾取?当有任何东西在反射时被调用或没有在代码中被特别调用时,代码覆盖工具就会丢失。我更新了这个问题,似乎与流畅的断言没有任何关系。