在S60平台进行单元测试(上)

发表于:2010-3-12 11:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Li Fang    来源:forum.nokia.com

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

void CMapExampleSmsEngineTest::tearDown()
  {
   delete iTarget;
   delete iObserver;
  }

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

void CMapExampleSmsEngineTest::testSendMessage()
  {
   iTarget->SendSmsL(_L("12345678"), _L("abcd"));
  }

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

// global function pointer
void (*gRSendAsMessage_SetBodyTextLHook)() = NULL;
 
void ThrowExceptionL()
  {
  User::Leave(KErrGeneral);
  }
void RSendAsMessage::SetBodyTextL(const TDesC16& a)
  {
   if(gRSendAsMessage_SetBodyTextLHook)
   gRSendAsMessage_SetBodyTextLHook();
  }
 
void CMapExampleSmsEngineTest::testSendMessageExceptions()
  {
   gRSendAsMessage_SetBodyTextLHook = ThrowExceptionL;
  TS_ASSERT_THROWS_ANYTHING(
    iTarget->SendSmsL(_L("12345678"), _L("abcd"))
   );
  }

  该测试实例首先为此函数定义一个会退出函数指针,然后调用SendSmsL。此调用在测试宏(assert macro)内封装。该宏会检测微囊代码抛出异常。如果不这样做,系统会向测试框架报错测试没有通过。

相关链接:

 在S60平台进行单元测试(下)

55/5<12345
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号