测试抛出失败的函数的最佳方法是什么?还是测试一个对失败相当免疫的功能?
例如;我有一个 I/O Completion Port
类,如果它不能正确初始化端口,它会在构造函数中抛出。这使用初始化列表中 CreateIoCompletionPort
的 Win32
函数。如果句柄设置不正确——非空值——那么构造函数将抛出异常。我从未见过此功能失败。
我很确定这个(以及我的代码中的其他类似函数)如果它们失败时会正确运行,代码有 50 行长,包括空格,所以我的问题是
a) 是否值得测试它会抛出
b) 如果值得测试,如何测试?
c) 应该对简单的包装类进行单元测试吗?
对于 b) 我考虑过覆盖 CreateIoCompletionPort
并传递值。在单元测试中覆盖它,并在传入某个值时使其返回 0。但是,由于在构造函数中使用了它,因此它需要是静态的。这看起来是否有效?
最佳答案
如果您在 .NET 中执行此操作,则可以将 ExpectedException 属性添加到您的测试中:
[Test, ExpectedException(typeof(SpecificException), "Exception's specific message")]
public void TestWhichHasException()
{
CallMethodThatThrowsSpecificException();
}
如果抛出该类型并带有指定消息的异常,则测试将通过。该属性具有其他重载,包括具有 InnerExceptions 等。
关于c++ - 测试抛出失败的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7614/