- GoogleTest 教程
- GoogleTest - 主页
- GoogleTest - 环境设置
- GoogleTest - 运行第一个测试
- GoogleTest - 术语
- GoogleTest - 禁用测试
- GoogleTest - 断言
- GoogleTest - 死亡测试
- GoogleTest - 测试夹具
- GoogleTest - 事件侦听器
- GoogleTest 有用资源
- GoogleTest - 有用资源
- GoogleTest - 讨论
GoogleTest - 死亡测试
GoogleTest 中的死亡测试用于验证程序在某些条件下会以预期的方式终止,从而确保一致性。此类断言检查在输入错误时是否会显示正确的错误消息,或者进程是否会退出并带有正确的退出代码。
如何编写死亡测试?
可以使用以下断言在 GoogleTest 中编写死亡测试 −
- EXPECT_DEATH() 或 ASSERT_DEATH() − 它接受两个参数,一个语句和一个匹配器。此断言测试语句是否导致进程以非零退出状态终止,并产生与匹配器匹配的 stderr 输出。
- EXPECT_DEATH_IF_SUPPORTED() 或 ASSERT_DEATH_IF_SUPPORTED() − 它首先检查死亡测试是否受支持。如果是,则行为与 EXPECT_DEATH 相同。
- EXPECT_DEBUG_DEATH() 或 ASSERT_DEBUG_DEATH() − 它在调试模式下也与 EXPECT_DEATH 的行为相同。当不在调试模式下时,仅执行该语句。
- EXPECT_EXIT() 或 ASSERT_EXIT() − 它获取三个参数:一个语句、一个谓词和一个匹配器。它验证语句是否导致进程以满足谓词的退出状态终止,并产生与匹配器匹配的 stderr 输出。在此处,参数谓词是接受整数退出状态并返回布尔值的一个函数。
示例
以下示例说明如何在 GoogleTest 中编写死亡测试。
#include <gtest/gtest.h>
#include <iostream>
int divideNum(int numerator, int denominator) {
if (denominator == 0) {
std::cerr << "Error Occured: Denominator should not be zero" << std::endl;
exit(1);
}
return numerator / denominator;
}
TEST(CheckDivison, ForZeroDenominator) {
// death test
ASSERT_DEATH(divideNum(25, 0), "Cannot be divided by zero");
}
TEST(CheckDivison, WithZeroDenominator) {
// death test
ASSERT_EXIT(divideNum(74, 0), ::testing::ExitedWithCode(1), "Cannot be divided by zero");
}
当运行此代码时,将在控制台中显示以下输出 −
Test project D:/gTest/test5/build
Start 1: CheckDivison.ForZeroDenominator
1/2 Test #1: CheckDivison.ForZeroDenominator ....***Failed 0.06 sec
Start 2: CheckDivison.WithZeroDenominator
2/2 Test #2: CheckDivison.WithZeroDenominator ...***Failed 0.03 sec
0% tests passed, 2 tests failed out of 2
Total Test time (real) = 0.19 sec
The following tests FAILED:
1 - CheckDivison.ForZeroDenominator (Failed)
2 - CheckDivison.WithZeroDenominator (Failed)
广告