展开后,我们观察到:
1. TEST宏展开后,是一个继承自testing::Test的类。
2. 我们在TEST宏里面写的测试代码,其实是被放到了类的TestBody方法中。
3. 通过静态变量test_info_,调用MakeAndRegisterTestInfo对测试案例进行注册。
如下图:
上面关键的方法就是MakeAndRegisterTestInfo了,我们跳到MakeAndRegisterTestInfo函数中:
// 创建一个 TestInfo 对象并注册到 Google Test; // 返回创建的TestInfo对象 // // 参数: // // test_case_name: 测试案例的名称 // name: 测试的名称 // test_case_comment: 测试案例的注释信息 // comment: 测试的注释信息 // fixture_class_id: test fixture类的ID // set_up_tc: 事件函数SetUpTestCases的函数地址 // tear_down_tc: 事件函数TearDownTestCases的函数地址 // factory: 工厂对象,用于创建测试对象(Test) TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* test_case_comment, const char* comment, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory) { TestInfo* const test_info = new TestInfo(test_case_name, name, test_case_comment, comment, fixture_class_id, factory); GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); return test_info; } |