【发布时间】:2016-06-29 23:23:08
【问题描述】:
我正在使用 google 单元测试框架(fixtures)使用 C++ 单元测试,测试后的清理对我来说非常重要。但是如果发生异常,可执行文件会崩溃并且清理永远不会发生。有没有办法在出现异常的情况下强制清理?
【问题讨论】:
-
捕获异常?
我正在使用 google 单元测试框架(fixtures)使用 C++ 单元测试,测试后的清理对我来说非常重要。但是如果发生异常,可执行文件会崩溃并且清理永远不会发生。有没有办法在出现异常的情况下强制清理?
【问题讨论】:
Test Fixtures 有特殊的构造和析构方法。
它们被称为SetUp() 和TearDown()。
在您的TearDown() 方法中放置适当的清理代码。
class FooTest : public ::testing::Test
{
TestObject *object;
virtual void SetUp()
{
TestObject = new TestObject();
}
virtual void TearDown()
{
//clean up occurs when test completes or an exception is thrown
delete object;
}
};
建议使用smart pointers,并遵循RAII 的做法,但我意识到这并不总是可行的,具体取决于您正在测试的内容(例如旧版C API)。
除此之外,您始终可以捕获异常,并在捕获时处理清理。
【讨论】: