在 Symbian S60 平台进行单元测试
2010-03-16 17:18:00 来源:WEB开发网7 }
8 void RSendAsMessage::SetBodyTextL(const TDesC16& a)
9 {
10 if(gRSendAsMessage_SetBodyTextLHook)
11 gRSendAsMessage_SetBodyTextLHook();
12 }
13
14 void CMapExampleSmsEngineTest::testSendMessageExceptions()
15 {
16 gRSendAsMessage_SetBodyTextLHook = ThrowExceptionL;
17 TS_ASSERT_THROWS_ANYTHING(
18 iTarget->SendSmsL(_L("12345678"), _L("abcd"))
19 );
20 }
21
(下)
代码覆盖工具被用来查找测试覆盖测试码的优劣程度。BullseyeCoverage [5]是Symbian开发中最常用的。其使用过程如下:
1. 在BullseyeCoverage(查看图3)下选择按钮打开覆盖编译器。
2. 重新编译测试程序。
3. 在模拟器上运行测试程序。
4. 查看覆盖结果。
图3:一轮测试之后的代码覆盖情况
测试结果包括函数覆盖和分枝覆盖。从如上图3所示,我们能看到 SendSMSL()被充分测试(从结构化角度来看),而ParseMsgUid()则被部分测试。使用更详细的覆盖试图(查看图4),代码内容将会被显示,并且如果所有的目标路径都没被全部执行的话,它将会被标注出来。
图4:详细的代码覆盖分析
将科覆盖率提高到100%是非常困难的。通常的方法是使测试实例尽可能小而简单。这就是为什么很多测试实例直到目标函数的覆盖率达到可接受程度时才被用到。测试实例需通过函数的期望值测试,直到所有有意义的小目标在执行中均被测试。目标对象的状态在从测试代码里调用实函数时或许需要在外部被修改。这个过程可通过以下方式实现:
* 当它们为公有时直接改变其属性调用能改变状态的必要函数时(例如存在所需属性的设置函数)
* 间接改变其属性当目标类的属性为保护类或私有类时,我们需要一种特殊的方法,比如
* 把一个测试类定义为一个友元类,例如:
更多精彩
赞助商链接