c++ - 测试抛出失败的函数

标签 c++ unit-testing tdd

测试抛出失败的函数的最佳方法是什么?还是测试一个对失败相当免疫的功能?

例如;我有一个 I/O Completion Port 类,如果它不能正确初始化端口,它会在构造函数中抛出。这使用初始化列表中 CreateIoCompletionPortWin32 函数。如果句柄设置不正确——非空值——那么构造函数将抛出异常。我从未见过此功能失败。

我很确定这个(以及我的代码中的其他类似函数)如果它们失败时会正确运行,代码有 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/

相关文章:

c++ - 从应用程序启动 Java 时在 MFC 应用程序中显示等待光标,直到它完成其进程

c++ - VS2010 C++成员模板函数特化错误

c++ - 'ld : symbol(s) not found for architecture ? ? ?' even when it' 在那里

c# - 如何对 Windows 服务进行单元测试?

c++ - Boost 单元测试框架 : include main function of my codebase

unit-testing - 这段代码可测试吗?

angular - 使用 Angular : how to test changes on parent to child 进行单元测试

try 中变量的 C++ 作用域

django 测试客户端失败,但 url 有效

ruby-on-rails - rails : creating a feature spec to test a form that has a file upload field