写点什么

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

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

关注

评论

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

卷起来了!阿里2025版“微服务全阶笔记”,涵盖微服务全部操作

了不起的程序猿

微服务 后端 架构师 SpringCloud java面试

Byteman 使用指南(九)

FunTester

一加ace5和ace5pro选哪个好

妙龙

智能手机 一加手机

Android逆向实战:SSLPining处理

LLLibra146

Android 逆向

创维K6 Ultra 75英寸电视怎么样

妙龙

智能电视 创维电视

添可芙万Stretch S洗地机和添可Stretch Plus对比评测

妙龙

洗地机 添可芙万

添可芙万S20洗地机和添可Stretch Plus对比评测

妙龙

洗地机 添可芙万

骨传导助听器效果怎么样

妙龙

助听器

GO必知必会面试题汇总

王中阳Go

Go 面试题

一加Ace3 Pro和Ace5 对比选哪个好

妙龙

智能手机 一加手机

亚马逊商品详情接口(亚马逊API系列)

tbapi

亚马逊 亚马逊API 亚马逊商品详情接口

弯道超车!阿里高工新产2025版Java面试速成指南,面试骚操作都在里面了

了不起的程序猿

程序员 后端 架构师 java面试 Java八股文

多模态 AI 怎么玩?这里有 18 个脑洞

声网

提升项目管理效率:10大主流需求变更管理工具解析

爱吃小舅的鱼

需求管理 需求变更 需求管理工具

8款适用于制造业的需求管理工具,提升生产效率

爱吃小舅的鱼

需求管理 制造业 需求管理工具

骨导助听器和气导助听器哪个好

妙龙

助听器

添可Stretch Plus和添可芙万Chorus洗地机对比评测

妙龙

洗地机 添可芙万

一加Ace 5和红米K80对比

妙龙

智能手机 一加手机 红米手机

打工人最强福音上线!AOne终端全面接入DeepSeek大模型!

天翼云开发者社区

人工智能 大模型 办公助手 DeepSeek

骨传导助听器的优缺点评测

妙龙

助听器

添可芙万Booster洗地机和添可Stretch Plus选哪个

妙龙

洗地机 添可芙万

真香!阿里最新出品Java面试核心讲(2025版),Github已星标50K

了不起的程序猿

程序员 后端 java面试 java架构师 Java八股文

左点zdeer骨传导助听器 评测

妙龙

助听器

Svelte 最新中文文档翻译(7)—— snippet 与 @render

冴羽

vue.js 前端 React Svelte SvelteKit

线上故障与故障测试

FunTester

deepseek 对于 Web 前端过去,现在,未来的看法!称未来可能不叫前端工程师...

CoderBin

AI 前端 Web DeepSeek

LeetCode题解:2690. 无穷方法对象,Proxy

Lee Chen

添可芙万洗地机Stretch Plus和追觅洗地机H20 Ultra对比

妙龙

洗地机 添可芙万

一加Ace 5和iQOO Neo10选哪个好

妙龙

智能手机 iqoo 一加手机

DeepSeek AI编程,零编码开发情人节“情侣默契挑战”微信小程序MVP,仅需1小时,实战教程,不懂编程也行

陆通

AI 网关对决:Higress 与 OneAPI 的功能对比

Se7en

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