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 {
    // 测试开始前调用
    void OnTestStart(const ::testing::TestInfo& test_info) override {
        std::cout << "test is starting : " << test_info.name() << std::endl;
    }

    // 测试结束后调用
    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);

    // 创建并注册自定义测试事件监听器
    ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance() -> listeners();
    listeners.Append(new FirstTestEventListener);

    int result = RUN_ALL_TESTS();
}

由于我们没有进行任何测试,因此此代码不会产生任何输出。