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

对 Junit4 的注释标签支持

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

@Test(expected=...)

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

public void insertIfNotExist(Account account) { if(account==null) throw new IllegalArgumentException("account is null"); Account acct = accountDao.getAccountById(account.getId()); if(acct==null) { log.debug("No "+account+" found,would insert it."); accountDao.saveAccount(account); } acct = null; }  

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

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

运行结果是 green bar。

@Test(timeout=...)

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

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

public void doSomeHugeJob() { try { Thread.sleep(2*1000); } catch (InterruptedException e) { } }  

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

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

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

@Repeat

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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5e03286ffd137e51744799d20aff3120.html