在 Symbian S60 平台进行单元测试
2010-03-16 17:18:00 来源:WEB开发网1 PRJ_MMPFILES
2 makefile ExtraTestBuildTasks.bldmake
3 SymbianOSUnit.mmp
以上步骤完成以后,要测试的范例路径如图1所示。
图1:工程目录结构图
现在创建测试工程并将其运行在模拟器上。首先,迅速打开命令行将其路径转到 C: empMapEx est. 然后用bldmake bldfiles命令创建编译文件。其次,用abld makefile指令创建makefiles文件。这是非常重要的过程因为它生成ExtraTestBuildTasks.bldmake指令将生成测试工程的框架。最后,用命令行abld build winscw udeb在模拟器上编译测试工程。这个用来运行测试工程的SymbianOSUnit应用,会出现在菜单里。选择菜单里的“运行所有套件”选项并找到如何执行测试(如图2)。
图2:使用 SymbianOSUnit进行单元测试
在上述例子中,所有的测试都是无误运行的。这是我们所期望的,因为这个测试实例是空函数实现的。
● 排除依赖关系
开发者现在应该开始测试实驱动类。首先,包括一个对源文件 (TestSource.cpp)测试目标的定义(CMapExampleSmsEngine) #include "cmapexamplesmsengine.h"
然后从.mmp文件中用非注释行的方式把测试目标函数加到工程中。
SOURCE CMapExampleSMSEngine.cpp
这里有一个非常难的部分:在执行的过程中测试性是不被考虑的,所以可能会有联缠,私有区域等困难,使得单元测试具有挑战性。在我们的实例中,会使用信息类>RSendAsMessage和RSendAs,但是模拟结果是很困难的。
解决问题的办法是把默认的库函数替换为开发者自己的。当不能和现有的库相连,但使用开发者所需要的库函数就可实现时,该方法可被使用。当我们缺失一个.mmp文件中的库函数时,编译器将会编译源代码,但链接部分将无法生成最终代码,报错如下:
Undefined symbol: 'void RSendAsMessage::CreateL(class RSendAs &, class TUid) (?CreateL@RSendAsMessage@@QAEXAAVRSendAs@@VTUid@@@Z)'
开发者的任务是使用一些函数实现这种方法,以达到测试需求。此时首先可选择的是简单的空函数,方法是将函数返回值设为NULL或者其他硬编码默认值。注意此方法金用于目标测试工程需要使用函数时(例如,并不需要使用29种所有的RSendAsMessage方法)。空函数法类似于以下几行实现链接的代码:
更多精彩
赞助商链接