写点什么

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:527417
用户头像

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

关注

评论

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

《算法导论(第4版)》阅读笔记:p134-p155

codists

算法

Taro on Harmony C-API 版本正式开源

京东零售技术

HarmonyNEXT手动申请权限以及使用系统控件获取地址坐标的案例(区别)

九九花开

前端 鸿蒙5.0 HarmonyNEXT5.0 鸿蒙地理坐标获取 HarmonyOSNEXT权限申请

鸿蒙版《智慧农业APP》通过华为云IoT平台实现软件硬件互联

九九花开

物联网 华为云IoT平台 鸿蒙5.0 HarmonyOS NEXT

网易伏羲亮相YEF2025大会:聚焦AI创新,CCF-网易雷火联合基金二期申报延长

网易伏羲

人机协作 网易伏羲 网易雷火 网易有灵

共赴万物智联新世界 开源鸿蒙开发者大会2025盛大召开

科技热闻

有哪些类似于jobleap.cn的职业发展相关平台

Y11

求职 找工作 就业 失业

开源鸿蒙智能手表生态暨新品发布:开启穿戴产业新纪元

极客天地

openEuler助力鲲鹏+xPU全方位协同,加速使能AI业务生态

科技热闻

【等保知识】过等保单位如何选择备案地?新政策依据是什么?

行云管家

等保 等级保护 等保测评

嘉为蓝鲸 WeOpsV5.22&V4.22 接入大模型:打造 AI 创新运维场景

嘉为蓝鲸

智能运维 #WeOps

2025深圳搞钱地图:按这张图找工作,房租少付1/3,工资多拿50%

测试人

人工智能 软件测试 内推

淘天集团多项最新AI技术成果亮相TongAI大会,三篇论文入选Poster展示

新消费日报

重磅预告!《AI融合高等教育白皮书》即将发布,专家集聚解读先行探索,邀您共同见证

ModelWhale

人工智能 AI+学科白皮书 人工智能通识教育 人工智能教育

案例解读:CST如何直接导入弯折后的PCB

思茂信息

cst CST软件 CST Studio Suite

【HarmonyOS 5】多目标产物构建实践

深海的鲸同学 luvi

鸿蒙 HarmonyOS DevEco Studio HarmonyOS SDK应用服务

【融麟科技】WeOps赋能CMDB与自动化管控驱动企业IT资源高效管理!

嘉为蓝鲸

CMDB 智能运维 #WeOps

【华为云MySQL技术专栏】TaurusDB存算分离,SAL组件的妙用

华为云开发者联盟

HarmonyOS运动开发:如何绘制运动速度轨迹

王二蛋和他的张大花

鸿蒙

智能运维平台 OpsPilot:Jenkins 流水线全链路优化实践

嘉为蓝鲸

智能运维 #WeOps OpsPilot

区块链ETF软件系统的开发

北京木奇移动技术有限公司

区块链技术 软件外包公司 区块链ETF

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(4)

HarmonyOS SDK

harmoyos

国产CPU品牌汇总以及作用简单介绍

行云管家

信创 国产化

备份历史可查 + 元数据留存,助力制品版本追溯与合规审计

嘉为蓝鲸

DevOps 智能运维 制品库

技术升级,openGauss数据库一体机商业实践成果显著

科技热闻

MCP+A2A协议如何推动AI智能体进化为超级分布式网络

测试人

人工智能 软件测试

深入解析:AI 智能体的八个关键概念

测试人

人工智能

信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)

tapdata

GaussDB 实时同步 StarRocks 实时数仓 Doris 实时同步 数据同步方案 TapData 数据集成

webgl技术在3D展示中的应用

北京木奇移动技术有限公司

软件外包公司 webgl技术 3D展示

Amoro + Flink CDC 数据融合入湖新体验

Apache Flink

大数据 flink 实时计算 Flink CDC

系统人看过来!六大要点助你搞懂进销存系统!

积木链小链

数字化 智能制造 进销存系统

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