单元测试自定义异常

微型人

我的代码覆盖率已将我的自定义例外列为0测试覆盖率。我正在使用MsTest,Moq和Fluentassertions。是否有针对自定义异常的适当单元测试?

这是我的异常类

  public class ConfigurationNotFoundException : Exception
    {
        public ConfigurationNotFoundException()
        {
        }

        public ConfigurationNotFoundException(string message) : base(message)
        {
        }

        public ConfigurationNotFoundException(string message, Exception innerException) : base(message, innerException)
        {
        }

        protected ConfigurationNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context)
        {
        }
    }
皮埃尔·卢克·皮诺特

如果显示为0%覆盖率,那是因为未使用/未测试。

使用您原始的自定义异常类,以及使用它的这个漂亮的类:

public class SomeClass
{
    public void SomeMethod()
    {
        throw new ConfigurationNotFoundException("Hey!");
    }
}

如果我有以下单元测试(带有流利的断言):

[TestClass]
public class SomeClassTest
{
    [TestMethod]
    public void SomeMethodShouldThrow()
    {
        Action invocation = () => new SomeClass().SomeMethod();

        invocation.ShouldThrow<ConfigurationNotFoundException>().WithMessage("Hey!");
    }
}

覆盖范围正确显示了所使用的构造函数,如下所示:

覆盖范围结果


因此,如果未涵盖它,那么它将未经测试或未使用。

要验证它是否未使用,可以右键单击方法名称,然后选择“查找用法”。如果显示“不使用”消息,则可以安全地将其删除。

如果已使用但未经测试;测试它(行为,而不是异常类本身)。


在我们之前的示例中,您仅需要以下内容:

public class ConfigurationNotFoundException : Exception
{
    public ConfigurationNotFoundException(string message)
        : base(message)
    {
    }
}

其他构造函数不需要从继承Exception,并且只会使类混乱,因为它们没有任何作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章