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();
}

這段程式碼不會產生任何輸出,因為我們沒有給出任何測試。

廣告
© . All rights reserved.