# 1. 测试用例开发规范   便于对测试用例进行管理,指定测试用例开发规范。 ## 1.1. 命名规则   制定命名规则,是为了规范测试用例行为,为自动化测试提供管理遍历,因为googletest支持根据测试用例名字通配符检索运行目标测试用例。 ### 1.1.1. 基本概念 **硬件仿真**:对接口属性/数据进行模拟/检测的能力,常见于芯片板级依赖的接口,例如:串口,GPIO等,还有芯片SDK依赖接口,例如:音视频编解码接口; **单元测试**:单元测试指对单一功能接口的测试,一般不需要或少量使用gtest的mock功能即可完成测试,不需要实际链接外部接口,对模块内部代码功能进行有效验证; **用例所属模块**:测试时锁定目标测试用例的作用; **集成测试**:集成测试指对复杂业务进行测试,往往需要跨多层级多模块,需要大量使用gtest的mock功能才能完成的复杂逻辑测试,一般不针对代码本身而是针对产品定义的功能进行有效验证; **测试用例**: 1. EXAMPLE:对模块接口进行使用演示的测试用例; 2. AUTO:自动化运行的测试用例; 3. STRESS:压力测试用例,一般不在单次测试中执行; ### 1.1.2. 测试用例命名: 1. 仿真:硬件仿真,使用hardware simulation的缩写:**HS**,硬件仿真只能运行在Ubuntu系统进行仿真测试;真实硬件接口使用real hardware的缩写:**RH**,真实硬件接口测试用例只能运行在开发板进行真机测试; 2. 测试用例类型:含单元测试(UNIT)和集成测试(INTEGRATION); 3. 用例所属模块:大小驼峰; 4. 测试用例属性:EXAMPLE/AUTO/STRESS 5. 测试用例小名; 示例: 该测试用例标识属于SharedData模块的单元测试,作为example具有演示接口使用规范的作用,测试用例名为Deme7。 ``` TEST(SharedDataTest, UNIT_SharedData_EXAMPLE_Demo7) { // TODO: } ``` ### 1.1.3. 测试源码文件命名: 1. 每个测试可执行文件都有一个标准mian函数,文件名统一为:mainTest.cpp; ``` #include #include #include #include int main(int argc, char *argv[]) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); // 此处执行所有的测试用例; } ``` 2. 针对源码文件,对应的测试代码文件名为:源码文件名_Test.cpp; ``` 例如:cjson.c 对应的测试源码文件为cjson_Test.cpp ``` 3. 适配层源码文件的TEST文件命名区分Simulator版本和常规版本,Simulator版本在ubuntu模拟仿真环境测试(执行代码会调用芯片SDK接口),常规版本必须运行在开发板: ``` ├── CMakeLists.txt ├── mainTest.cpp ├── src │   └── BoardMain_Test.cpp // 常规测试代码,可运行在开发板系统; └── src_mock └── BoardMain_Simulator_Test.cpp // 运行过程会调用芯片依赖的API,需要对这些API进行mock处理,实现Linux x86平台的仿真测试; ``` 4. ## 1.2. TestTool 测试工具    每个独立模块(SDK内具有独立CMakeLists.txt的代码模块)都有对应的TestTool模块,主要用于对该模块的接口进行gmock处理,且对外暴露接口具备复用属性。一般类命名:模块名称+TestTool。 ## 1.3. 目录结构   所有测试代码位于< test >目录下,< test >下的目录结构保持和< SDK >一致,表示对应sdk代码模块的测试代码; 如果是芯片平台的test目录,需要区分板载测试代码和x86 Linux系统的测试代码;如下: ``` └── hal ├── CMakeLists.txt ├── mainTest.cpp ├── src // 芯片平台的测试代码; ├── src_mock // Linux x86测试代码 需要对板载接口打桩进行测试; └── tool // TestTool:该模块需要对外复用的测试代码; ```