在 gtest 中,可以使用 EXPECT_NO_THROW 宏来验证操作是否不会引发异常。
当代码确实抛出异常时,测试用例将被标记为失败。 但是,如果未使用 EXPECT_NO_THROW 宏并引发异常,则测试用例也会失败。
据我观察,以下功能在功能上是等效的:
sut.do_action();
EXPECT_NO_THROW(sut.do_action());
那么,使用 EXPECT_NO_THROW 有什么好处或理由吗?或者它的唯一目的是使测试用例规范更加明确?
太明显了。
EXPECT_NO_THROW(sut.do_action()) << "Must not throw";
sut.do_action();
std::cout << "Continue\n"; // does not output
EXPECT_NO_THROW(sut.do_action());
std::cout << "Continue\n"; // outputs regardless of an exception