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(); }
由于我们没有进行任何测试,因此此代码不会产生任何输出。