使用Spring进行单元测试(下)

发表于:2013-6-07 10:48

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

 作者:赵才文    来源:51Testing软件测试网采编

  @TransactionConfiguration 和 @Rollback

  缺省情况下,Spring 测试框架将事务管理委托到名为 transactionManager 的 bean 上,如果您的事务管理器不是这个名字,那需要指定 transactionManager 属性名称,还可以指定 defaultRollback 属性,缺省为 true,即所有的方法都 rollback,您可以指定为 false,这样,在一些需要 rollback 的方法,指定注释标签 @Rollback(true)即可。

  对 Junit4 的注释标签支持

  看了上面 Spring 测试框架的注释标签,我们来看看一些常见的基于 Junit4 的注释标签在 Spring 测试环境中的使用方法。

  @Test(expected=…)

  此注释标签的含义是,这是一个测试,期待一个异常的发生,期待的异常通过 xxx.class 标识。例如,我们修改 AccountService.Java 的 insertIfNotExist 方法,对于传入的参数如果为空,则抛出 IllegalArgumentException,如下:

  1. public void insertIfNotExist(Account account) {  
  2.     if(account==null)  
  3.         throw new IllegalArgumentException("account is null");  
  4.     Account acct = accountDao.getAccountById(account.getId());  
  5.     if(acct==null) {  
  6.         log.debug("No "+account+" found,would insert it.");  
  7.         accountDao.saveAccount(account);  
  8.     }  
  9.     acct = null;  
  10. }

  然后,在测试类中增加一个测试异常的方法,如下:

  1. @Test(expected=IllegalArgumentException.class)  
  2. public void testInsertException() {  
  3.     service.insertIfNotExist(null);  
  4. }

  运行结果是 green bar。

  @Test(timeout=…)

  可以给测试方法指定超时时间(毫秒级别),当测试方法的执行时间超过此值,则失败。

  比如在 AccountService 中增加如下方法:

  1. public void doSomeHugeJob() {  
  2.     try {  
  3.         Thread.sleep(2*1000);  
  4.     } catch (InterruptedException e) {  
  5.     }  
  6. }

  上述方法模拟任务执行时间 2 秒,则测试方法如下:

  1. @Test(timeout=3000)  
  2. public void testHugeJob() {  
  3.     service.doSomeHugeJob();  
  4. }

  上述测试方法期待 service.doSomeHugeJob 方法能在 3 秒内结束,执行测试结果是 green bar。

  @Repeat

  通过 @Repeat,您可以轻松的多次执行测试用例,而不用自己写 for 循环,使用方法:

  1. @Repeat(3)  
  2. @Test(expected=IllegalArgumentException.class)  
  3. public void testInsertException() {  
  4.     service.insertIfNotExist(null);  
  5. }

  这样,testInsertException 就能被执行 3 次。

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号