- 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)
廣告