技术开发 频道

在S60平台进行单元测试

  在构造过程中驱动器需要一个观察器。对参数可使用伪排除(查看附录A的详细介绍)。释放资源时执行销毁。

  void CMapExampleSmsEngineTest::tearDown()

  {

  delete iTarget;

  delete iObserver;

  }

  首先应拿来测试的实例是短信发送。这是个很简单的过程:该函数被调用而且如果他没有退出(抛出异常)那么这个测试用例就通过了。

  void CMapExampleSmsEngineTest::testSendMessage()

  {

  iTarget->SendSmsL(_L("12345678"), _L("abcd"));

  }

  短信发送可能会失败。RSendAsMessage::SetBodyTextL()可被退出以模拟异常。然后执行测试实例来确保SendSmsL退出。尽管如此,仅在测试实例里SetBodyTextL才能退出而且测试实例应控制该过程。实现控制的一种方法是运用全局变量,在调用测试目标时设置该测试实例,然后在变量的基础上实现SetBodyTextL。另一种更普遍的方法是定义一个全局函数指针,该指针在定义时被SetBodyTextL调用。测试实例代码如下:

1 // global function pointer
2 void (*gRSendAsMessage_SetBodyTextLHook)() = NULL;
3
4 void ThrowExceptionL()
5   {
6   User::Leave(KErrGeneral);
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
0
相关文章