- GoogleTest 教程
- GoogleTest - 首頁
- GoogleTest - 環境設定
- GoogleTest - 執行第一個測試
- GoogleTest - 命名規範
- GoogleTest - 停用測試
- GoogleTest - 斷言
- GoogleTest - Death 測試
- GoogleTest - 測試夾具
- GoogleTest - 事件監聽器
- GoogleTest 有用資源
- GoogleTest - 有用資源
- GoogleTest - 討論
GoogleTest - 事件監聽器
GoogleTest 中的事件監聽器是一個 API,允許您接收有關測試程式進度及其成功和失敗的通知。使用此 API,您可以接收各種事件的通知,例如測試程式、測試套件或測試方法的開始和結束等。
此外,它還可以幫助您將標準控制檯輸出替換為 XML 輸出,或提供完全不同的輸出格式,例如 GUI 或資料庫。
GoogleTest 中的每個事件都與一個處理程式函式相關聯。當事件觸發時,其上下文將作為引數傳遞給這些函式。引數型別如下:
- UnitTest − 它表示整個測試程式的狀態。
- TestSuite − 它提供有關測試套件的資訊。
- TestInfo − 它包含單個測試的狀態。
- TestPartResult − 它表示測試斷言的結果。
定義事件監聽器
在 GoogleTest 中,可以透過繼承 testing::TestEventListener 介面或 testing::EmptyTestEventListener 介面來定義事件監聽器。
TestEventListener 介面
TestEventListener 介面用於跟蹤測試的執行。它提供以下列出的虛擬方法,可以覆蓋這些方法來處理測試事件:
- OnTestProgramStart − 此方法在任何活動開始之前觸發。
- OnTestIterationStart − 在每次測試迭代開始之前觸發。
- OnEnvironmentsSetUpStart − 在每次測試迭代的環境設定開始之前觸發。
- OnEnvironmentsSetUpEnd − 在每次測試迭代的環境設定結束之後觸發。
- OnTestSuiteStart − 在測試套件開始之前呼叫。
- OnTestEnd − 當指定的測試結束時觸發。
EmptyTestEventListener 介面
GoogleTest 中的 EmptyTestEventListener 介面提供了 TestEventListener 介面中所有方法的空實現。要使用它,您只需覆蓋這些方法即可。
如何使用已定義的事件監聽器
要使用您定義的事件監聽器,請在呼叫 RUN_ALL_TESTS() 之前,將它的例項新增到 main() 函式中的 GoogleTest 事件監聽器列表中。此事件監聽器列表由TestEventListeners 類表示。
示例
讓我們看看如何在 GoogleTest 中編寫事件監聽器。
#include <gtest/gtest.h>
#include <iostream>
class FirstTestEventListener : public ::testing::EmptyTestEventListener {
// Called before a test starts
void OnTestStart(const ::testing::TestInfo& test_info) override {
std::cout << "test is starting : " << test_info.name() << std::endl;
}
// Called after a test ends
void OnTestEnd(const ::testing::TestInfo& test_info) override {
std::cout << "test finished : " << test_info.name() << std::endl;
}
};
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
// Create and register the custom test event listener
::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance() -> listeners();
listeners.Append(new FirstTestEventListener);
int result = RUN_ALL_TESTS();
}
這段程式碼不會產生任何輸出,因為我們沒有給出任何測試。
廣告