HWTEST_F(EventFilterHandlerTest, EventFilterHandlerTest_HandlePointerEventFilter_003, TestSize.Level1)
{
CALL_TEST_DEBUG;
std::shared_ptr event = PointerEvent::Create();
EXPECT_NE(event, nullptr);
EventFilterHandler handler;
EventFilterHandler::FilterInfo filter1 = {nullptr, nullptr, 1, 10, 0x1, 100};
EventFilterHandler::FilterInfo filter2 = {nullptr, nullptr, 2, 20, 0x2, 200};
EventFilterHandler::FilterInfo filter3 = {nullptr, nullptr, 3, 30, 0x3, 300};
handler.filters_.push_back(filter1);
handler.filters_.push_back(filter2);
handler.filters_.push_back(filter3);
ASSERT_EQ(handler.filters_.size(), 3);
ASSERT_TRUE(handler.filters_.front().IsSameClient(1, 100));
ASSERT_TRUE(handler.filters_.back().IsSameClient(3, 300));
bool result = handler.HandlePointerEventFilter(event);
ASSERT_FALSE(result);
}
HWTEST_F(EventFilterHandlerTest, EventFilterHandlerTest_HandlePointerEventFilter_003, TestSize.Level1)
这一行代码使用了自定义 的宏HWTEST_F来定义了一个测试用例。以下是对这行代码中各个部分的详细解释
1:HWTEST_F宏是一个自定义的用于华为openharmony项目中的测试宏,基于Google test框架进行了封装扩展。F代表测试夹具相关的测试,通常用于有测试夹具 的场景 ,测试夹具指的是在多个测试用例中共享的测试环境设置,在这段代码中EventFilterHandlerTest 类就是测试夹具。它的作用是定义 一个具体的测试用例,并将其与测试框架集成,以便在运行测试时能够 被 识别 和执行。
2.EventFilterHandlerTest 是测试用例所属的测试夹具类名。测试夹具类EventFilterHandlerTest 继承自testing::Test,提供了测试用例的公共设置(Setup)方法和清理(TearDown)方法逻辑,以及测试用例间可以共享的成员变量和函数等资源。在这个测试用例中,会基于EventFilterHandlerTest类的上下文来执行测试操作。
3.EventFilterHandlerTest_HandlePointerEventFilter_003 这是当前测试用例的名称。测试用例的名称应该能够 清晰地描述 此用例的功能和目的,从这个名称可以看出,这个测试用例是针对EventFilterHandler类的HandlePointerEventFilter方法进行的测试。
4.TestSize.Level1 这个是测试用例的属性标识 ,Testsize.Level1用于标记此测试用例的规模或重要性等级。TestSize可能是一个自定义的枚举类型或命名空间,level1表示这个测试用例属于第一等级,在测试策略时,不同等级的测试用例有不同 的等待优先级,频率等处理方式
下面分析一下 函数里面的每一行代码:
1:CALL_TEST_DEBUG;
这是一个宏调用 ,它用于在测试过程中输出一些调试信息,帮助开发者了解测试的执行流程和状态。具体的功能取决于此宏的定义 实现,会进行日志记录或其他调试相关的操作。
2:std::shared_ptr event = PointerEvent::Create();
使用std::shared_ptr 智能指针来管理 PointerEvent对象,调用 PointerEvent类的静态方法Create()来创建一个PointerEvent实例,并将其赋值给event智能指针。PointerEvent类用于表示与指针相关的输入事件,例如触摸事件等。
3: EXPECT_NE(event, nullptr);
这是Google Test框架中的断言宏,用于检查event指针是否不为 nullptr
4:EventFilterHandler handler;
创建一个EventFilterHandler 类的实例handler.EventFilterHandler类应该是用于处理输入事件过滤的核心 类,后续的操作将围绕这个实例展开
5:EventFilterHandler::FilterInfo filter1 = {nullptr, nullptr, 1, 10, 0x1, 100};
创建一个EventFilterHandler::FilterInfo结构体类型的变量filter1 ,并进行初始化。FilterInfo 结构体用于存储输入事件过滤器相关信息,从初始化的值来看,依次可能表示:过滤器的相关指针,过滤器ID,优先级,设备标签和客户端进程 ID
6:EventFilterHandler::FilterInfo filter2 = {nullptr, nullptr, 2, 20, 0x2, 200};
EventFilterHandler::FilterInfo filter3 = {nullptr, nullptr, 3, 30, 0x3, 300};
类似的,分别创建并初始化filter2,filter3变量,用于表示不同 的输入事件过滤器信息。
7:handler.filters_.push_back(filter1);
handler.filters_.push_back(filter2);
handler.filters_.push_back(filter3);
将filter1,filter2,filter3 依次添加到handler对象的filters_容器中,filters_容器是EventFilterHandler类中的用于存储所有 输入事件过滤器的成员变量,通常是一个std::vector类型的容器。
8: ASSERT_EQ(handler.filters_.size(), 3);
用于检查 handler.filters_容器大小 是否为3,验证前面 是否成功将三个过滤器信息添加到了容器中,如果容器大小 不为 3,则测试会失败并输出错误信息。
9: ASSERT_TRUE(handler.filters_.front().IsSameClient(1, 100));
调用 handler.filters_容器中的第一个元素front()的IsSameClient方法,并传入参数 1和100.issameclient方法用于判断当前过滤器的客户端id和进程ID是否与传入的参数 匹配,
ASSERT_TRUE(handler.filters_.back().IsSameClient(3, 300));
10:bool result = handler.HandlePointerEventFilter(event);
调用 handler对象的HandlePointerEventFilter方法,并传入之前创建的pointerevent实例event .这个方法用于处理指针事件的过滤逻辑,返回一个bool类型的值 ,表示事件是否被 过滤处理成功
ASSERT_FALSE(result);
综上所述 ,这个测试用例主要是创建了一个eventFilterHandler实例,添加 了三个输入事件过滤器信息,然后验证过滤口碑 添加 和相关属性是否正确 ,最后 调用 HandlePointerEventFilter 方法并断言 其返回值为false,