速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

JUnit 4.7 的新特性:Rule

  • 2009-07-23
  • 本文字数:1510 字

    阅读完需:约 5 分钟

JUnit 4.7 RC 版已经发布了,该版本具有一个重要的新特性:Rule。

本质上,Rule 是 JUnit 的另一种扩展机制,可在每次测试中为 JUnit 增加新功能。 Rule 可以替换掉大多数使用旧版本 JUnit 所编写的客户化运行器。关于该特性,之前有博客对其进行了探讨:

在 JUnit3 中,我们也可以用各种方式操控测试的运行过程。JUnit 4 简单性的一个代价就是丧失了这种元测试(meta-testing)的能力。对简单的测试倒是无所谓,但对于那些复杂的测试来说限制就太大了。JUnit 3 的对象框架风格默认情况下就是可扩展的,而 JUnit 4 的 DSL 风格却不是这样。昨晚我们又回归到了元测试,但要比以前更加简单、整洁。

除了增加 Rule 特性,新版 JUnit 还添加了很多核心 Rule:

  • TemporaryFolder:测试可以创建文件与目录并且会在测试运行结束后将其删除。这对于那些与文件系统打交道且独立运行的测试来说很有用。
  • ExternalResource:这是一种资源使用模式,它会提前建立好资源并且会在测试结束后将其销毁。这对于那些使用 socket、嵌入式服务器等资源的测试来说很有用。
  • ErrorCollector:可以让测试在失败后继续运行并在测试结束时报告所有错误。这对于那些需要验证大量独立条件的测试来说很有用(尽管这本身可能是个“test smell”)。
  • ExpectedException:可以在测试中指定期望的异常类型与消息。
  • Timeout:为类中的所有测试应用相同的超时时间。

来看看 Rule 的使用示例吧,下面的测试使用了 TemporaryFolder 和 ExpectedException Rule:

复制代码
public class DigitalAssetManagerTest {
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void countsAssets() throws IOException {
File icon = tempFolder.newFile("icon.png");
File assets = tempFolder.newFolder("assets");
createAssets(assets, 3);
DigitalAssetManager dam = new DigitalAssetManager(icon, assets);
assertEquals(3, dam.getAssetCount());
}
private void createAssets(File assets, int numberOfAssets) throws IOException {
for (int index = 0; index < numberOfAssets; index++) {
File asset = new File(assets, String.format("asset-%d.mpg", index));
Assert.assertTrue("Asset couldn't be created.", asset.createNewFile());
}
}
@Test
public void throwsIllegalArgumentExceptionIfIconIsNull() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Icon is null, not a file, or doesn't exist.");
new DigitalAssetManager(null, null);
}
}

为了简化开发,JUnit 还为这些 Rule 添加了几个基类:

  • Verifier:ErrorCollector 之类的 Rule 的基类,即使验证失败,测试也能通过。
  • TestWatchman:那些观测测试的运行而不会对结果进行修改的 Rule 的基类。

在 JUnit 4.7 的早期构建版中,Rule 在首次出现时被称作拦截器(Interceptor)。除了 Rule 以外,JUnit 4.7 还有以下变化:

  • 匹配器(matcher)的一些变化。
  • 显示超时测试的堆栈信息;这有助于诊断超时的原因。
  • 改进了 javadoc 并修复了几个 bug。

JUnit 4.7 的发布声明中对这些特性进行了详细的介绍。之前的发布声明中说要支持Hamcrest 1.2,但这次却将其移除了。

在最终版发布前,你可以从github 上下载JUnit 4.7 RC 版尝尝鲜、看看 org.junit.rules gear 、填下调查问卷、读读Kent Beck 的JUnit Max deadpooling 、在 blog friendfeed twitter 上了解其他用户对 JUnit 4.7 的一些反馈。

查看英文原文: JUnit 4.7: Per-Test rules

2009-07-23 20:527293
用户头像

发布了 88 篇内容, 共 263.0 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Rust从0到1-完结

rust

开源贡献分享:从网关内服务健康检查说起 | StartDT Tech Lab 09

奇点云

华为云GaussDB(for Redis)发布全新版本,两大核心特性正式亮相

华为云数据库小助手

性能调优 GaussDB GaussDB ( for Redis ) 华为云数据库

数据仓库领域常见建模方法及实例演示 | StartDT Tech Lab 16

奇点云

分布式任务调度的应用分享 | StartDT Tech Lab 13

奇点云

模型工厂,让AI算法触手可达 | StartDT Tech Lab 05

奇点云

灰度再度增持!!!Filecoin可投资吗?Filecoin值得投资吗?

区块链 分布式存储 IPFS 投资filecoin filecoin值得投资吗

运维工程师主要是做什么的?和网络工程师有啥区别?

行云管家

云计算 运维 网络 IT运维

一个不起眼却非常实用的功能介绍

ThingJS数字孪生引擎

大前端 物联网 可视化 数字孪生

TCP传输控制协议(二)

姬翔

9月日更

详解微信异步队列 MQ 2.0 的功能优化及拓展思路

OpenIM

如何优雅地设计DWS层? | StartDT Tech Lab 17

奇点云

性能优化之分页查询 | StartDT Tech Lab 12

奇点云

ipfs矿机挖矿原理是什么?ipfs矿机怎么搭建?

ipfs矿机挖矿原理是什么 ipfs矿机怎么搭建

博睿数据亮相 2021 服贸会,以智能运维赋能数字化体验

博睿数据

为什么行业老大经常和老二合并?

石云升

市场垄断 9月日更

DataMaleon组件化开发实践 | StartDT Tech Lab 14

奇点云

浅谈元数据采集 | StartDT Tech Lab 10

奇点云

SEO行业的困境:转型还是夹缝中求生存

石头IT视角

【数据库】数据库访问控制策略包含哪些?都一样吗?

行云管家

数据库 阿里云

CSS架构之tool层

Augus

9月日更

基于OLT(实体、关系、标签)建模方法论的最佳实践 | StartDT Tech Lab 08

奇点云

浅谈单点登录SSO实现方案 | StartDT Tech Lab 06

奇点云

市值管理机器人特点简析,交易所刷交易量机器人搭建

量化系统19942438797

市值机器人 市值管理

浪潮云洲×明风机械:让工业“哑设备”发声

云计算

Android | 音视频方向进阶路线及资源合集

轻口味

android 音视频 9月日更

大数据安全验证之Kerberos | StartDT Tech Lab 11

奇点云

浅谈对象体系 | StartDT Tech Lab 07

奇点云

狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了

Java 编程 架构 面试 程序人生

模块七作业

Clarke

实时移动通信中基于时空域联合约束的低照度视频增强技术

OpenIM

JUnit 4.7的新特性:Rule_Java_Geoffrey Wiseman_InfoQ精选文章