对 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 次。