有硬件依赖或其他依赖的测试驱动开发
2017-02-15 10:42
375 查看
有硬件依赖或者操作系统依赖的TDD相对来说,要麻烦一些。需要写Fake,Spy,Mock等这些DOC(Dependency On Component)测试替代,来帮助测试。
即便是有一些TDD经验的同学,或许面对复杂的系统的TDD开发,也会感到有些无从下手。
参见什么是Mock,Spy,Fake
(一)首先,整个程序架构必须了然于胸,清楚需要开发哪些MOCK模块(下文中Spy,Fake统称为Mock)。见下面的例子(来自月James Grenning - 嵌入式C的TDD开发一书)。画出类关系图,确定被测模块和Mock模块之间关系。
(二)分析需求,列举出大致测试集(今后可以补充)
(三)搭建测试框架,完成初步的对测试辅助模块(Mock,Fake,Spy)的代码构建。
写对Mock的基本测试,这些基本测试包含诸如在Mock中验证被测模块传递的参数的测试。
step1,: 在TDD测试项目中包含被测模块与其他模块的接口头文件。
比如:LightController.h, TimeService.h文件需要被包含在项目文件中去。然后定义LightControllerSpy.h 和 FakeTimeService.h两个Mock的头文件。这两个头文件分别包含接口头文件。
step 2:写LightControllerSpyTest.cpp和FakeTimeService.cpp. 刚开始只是写一些基本测试case来测试今后为测试被测模块准备的辅助测试数据,如:传递的参数。
step 3:创建LightControllerSpy.cpp 和 FakeTimeService.cpp,并实现少许代码,pass step2的测试case
note:步骤3主要是创建测试辅助Mock,形成基本测试框架。
(四)运用0-1-N的TDD测试原则,逐步展开对被测模块的测试和实现
所谓0-1-N就是从无到有到多的逐步写测试Case,一步一步带领开发完成。每小步都得到验证。
在这个步骤中被测代码LightScheduler.cpp被创建。在该代码中,它包含的头文件是LightController.h, TimeService.h,而调用的是替代函数,分别在LightControllerSpy.cpp和 FakeTimeService.cpp中。 这里用到的是链接时替换。也就是在链接的时候,用Mock代码替换不能控制模块的接口。这种技术对脱离目标的测试以及消除对第三方库依附于硬件的模块或者操作系统的依赖特别有帮助。
即便是有一些TDD经验的同学,或许面对复杂的系统的TDD开发,也会感到有些无从下手。
参见什么是Mock,Spy,Fake
(一)首先,整个程序架构必须了然于胸,清楚需要开发哪些MOCK模块(下文中Spy,Fake统称为Mock)。见下面的例子(来自月James Grenning - 嵌入式C的TDD开发一书)。画出类关系图,确定被测模块和Mock模块之间关系。
(二)分析需求,列举出大致测试集(今后可以补充)
(三)搭建测试框架,完成初步的对测试辅助模块(Mock,Fake,Spy)的代码构建。
写对Mock的基本测试,这些基本测试包含诸如在Mock中验证被测模块传递的参数的测试。
step1,: 在TDD测试项目中包含被测模块与其他模块的接口头文件。
比如:LightController.h, TimeService.h文件需要被包含在项目文件中去。然后定义LightControllerSpy.h 和 FakeTimeService.h两个Mock的头文件。这两个头文件分别包含接口头文件。
step 2:写LightControllerSpyTest.cpp和FakeTimeService.cpp. 刚开始只是写一些基本测试case来测试今后为测试被测模块准备的辅助测试数据,如:传递的参数。
step 3:创建LightControllerSpy.cpp 和 FakeTimeService.cpp,并实现少许代码,pass step2的测试case
note:步骤3主要是创建测试辅助Mock,形成基本测试框架。
(四)运用0-1-N的TDD测试原则,逐步展开对被测模块的测试和实现
所谓0-1-N就是从无到有到多的逐步写测试Case,一步一步带领开发完成。每小步都得到验证。
在这个步骤中被测代码LightScheduler.cpp被创建。在该代码中,它包含的头文件是LightController.h, TimeService.h,而调用的是替代函数,分别在LightControllerSpy.cpp和 FakeTimeService.cpp中。 这里用到的是链接时替换。也就是在链接的时候,用Mock代码替换不能控制模块的接口。这种技术对脱离目标的测试以及消除对第三方库依附于硬件的模块或者操作系统的依赖特别有帮助。
相关文章推荐
- “测试驱动的软件开发”,与测试无关
- 【杂谈】测试驱动开发
- 测试驱动开发
- 测试驱动的开发系列 第一部分:概述(转)
- 上周技术关注:测试驱动开发全功略
- 测试开发驱动实践
- 用NUnit2.1简单实现.net的测试驱动开发(TDD)
- CppUnit - 测试驱动开发入门-转载
- 挑战极限 - 测试驱动开发实战及DUnit 使用
- 关于“测试驱动开发”的问答
- 呜呜....可惜...呜呜,也谈谈测试驱动开发
- 转贴——关于测试驱动开发
- 感悟测试驱动开发
- CppUnit - 测试驱动开发入门 (转)
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- 爱睡觉的窝:测试驱动开发中的陷阱
- 从企业的运行价值链说起——我眼中的测试驱动开发(TDD)
- [转]感悟测试驱动开发
- 关于测试驱动开发的文章
- 设计,UML,测试驱动开发