NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

儋州市营商环境建设局:二维码一扫,办事更便捷!

草料二维码

二维码 草料二维码

直播预告|从一张 CD 说起,关于播放器的前世今生

声网

Starknet(strk) 跨链桥教程:手把手教你用bitget钱包跨链

长安区块链

《MySQL是怎样运行的:从根儿上理解 MySQL》PDF

程序员李木子

iA Writer for Mac(mac好用的写作软件)v7.1中文激活版

影影绰绰一往直前

谈谈鸿蒙 Harmony 的跨端技术方案

Onegun

鸿蒙 HarmonyOS

CAN总线位时序的介绍

智趣匠

mClock调度算法与QoS

算法 存储 Ceph QoS 调度

Boxy SVG for Mac(矢量图编辑器)v4.25.2免激活版

影影绰绰一往直前

量化合约丨现货丨对冲丨秒合约模式系统开发源码搭建

西安链酷科技

DAPP智能合约交易系统开发 DAPP系统开发

Starknet(strk) 跨链桥教程:手把手教你用bitget钱包跨链

股市老人

体育赛事直播平台,全方位引流策略分享

软件开发-梦幻运营部

DAPP去中心化交易质押分红系统开发模式案例

西安链酷科技

飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践

飞书深诺技术团队

大数据 数据仓库

Java 抽象类与方法:实现安全性与代码重用

小万哥

Java 程序人生 编程语言 软件工程 后端开发

找工作必备AI工具!AI润色简历、AI生成作品集PPT、AI模拟面试、AI绘画、AI绘图等!

彭宏豪95

效率 AI 职场 办公软件 AIGC

BetterMouse for Mac(鼠标增强软件)v1.5 (4612)中文激活版

影影绰绰一往直前

gRPC-第二代rpc服务

京东科技开发者

linux IP地址原理,分类,子网划分,VLAN,TRUNK详解

百度搜索:蓝易云

云计算 Linux 运维 IP 云服务器

BSC链DAPP质押合约代币系统开发|详情需求|指南方案

西安链酷科技

DAPP系统开发

数字藏品开发公司 nft平台搭建

西安链酷科技

数字藏品开发

DAPP去中心化交易质押分红系统开发模式案例

西安链酷科技

DAPP智能合约交易系统开发

HttpServletRequest JSON序列化问题分析

五陵散人

JSON序列化 HTTP请求

Starknet(strk) 跨链桥教程:手把手教你用bitget钱包跨链

股市老人

k8s说一下deployment,statefulset,daemonset的区别

百度搜索:蓝易云

云计算 Linux Kubernetes 运维 云服务器

项目包装宣发推广、白皮书官网搭建、ppt制作、mg动画设计

西安链酷科技

宣发

Java垃圾回收全过程

百度搜索:蓝易云

Java 云计算 Linux 运维 云服务器

前端和大数据怎么选择?

算法的秘密

当数据遇上代码:程序员的假设检验

数据分析 数学 SLO 概率论

低代码:数智化助力新农业发展

快乐非自愿限量之名

低代码 数字化 新农业

ai写ppt工具有哪些?这5款值得推荐,办公必备!

彭宏豪95

人工智能 职场 PPT 在线白板 AIGC

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