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)
廣告
© . All rights reserved.