写点什么

开源项目 Junit-Ext 发布

  • 2009-06-04
  • 本文字数:1948 字

    阅读完需:约 6 分钟

开源项目 Junit-Ext 前些日子发布了 1.0 RC3 版本,InfoQ 中文站与项目发起人、ThoughtWorks 咨询师胡凯就这次发布进行了简短的采访。

InfoQ 中文站:这个项目的核心概念是什么?

胡凯:处理出现在特定环境的产品缺陷是开发者最常见的工作之一,特定环境可能意味着特定的操作系统,特定的运行时环境,也可能是应用所依赖的第三方系统处于特定 的状态。这样特殊的环境对开发者编写测试提出了很大的挑战,譬如对于这样一个功能 / 缺陷: 在 Windows 环境中,用户如果指定了过长的路径(Windows 的路径长度不能超过 255 个字符),应用输出正确的提示信息。响应的单元测试并不复杂:

@Test
public void shouldPromptErrorMessageWhenPathIsLongerThan255OnWindows() {
try {
document.saveTo(veryLongPath())// 用户希望用一个很长的路径来保存文件
Assert.fail(“should throw exception when path is too long.”);
} catch (PathIsToLongException e) {
assertThat(e.message, is(“您指定的路径过长”));
}
}

在修复缺陷后,开发者面临另外一个难题,上面测试在 Linux 平台无法通过,因为 Linux 平台并没有对路径长度的限制,要想提交代码让它与其他开发者的工作合并,开发者必须对测试进行处理,让它更聪明一些:

@Test
public void shouldPromptErrorMessageWhenPathIsLongerThan255OnWindows() {
if (current running on linux?) {
return;// 在 linux 平台下不运行这个测试
}
try {
document.saveTo(veryLongPath())// 用户希望用一个很长的路径来保存文件
Assert.fail(“should throw exception when path is too long.”);
} catch (PathIsToLongException e) {
assertThat(e.message, is(“您指定的路径过长”));
}
}

测试运行的前验工作在很多团队里都很普遍,譬如检验数据库中的某条记录是否存在,某个文件是否尚未被创建等,这些前验可以帮助测试变得更健壮。这些工作的客观存在让我觉得 junit 如果能更聪明一些,我的工作就会简单一些,编写程序也更有效率。这个想法催生了 Junit-Ext ,对于上面的例子,使用 Junit-Ext ,开发者可以通过标注 (annotation) 对环境进行检验:

@Test
@RunIf(value = OSChecker.class, arguments = Windows)
public void shouldPromptErrorMessageWhenPathIsLongerThan255OnWindows() {
try {
document.saveTo(veryLongPath())// 用户希望用一个很长的路径来保存文件
Assert.fail(“should throw exception when path is too long.”);
} catch (PathIsToLongException e) {
assertThat(e.message, is(“您指定的路径过长”));
}
}

@RunIf 会在非 Windows 平台忽略 (等同于 junit @Ignore) 这个测试,让开发者专注于业务逻辑的测试, 说到 Junit-Ext 核心概念,就是一个能做到“易者易为,难者可为”的更聪明的 junit

InfoQ 中文站 :目前存在有跟这个项目相似的其他开源项目吗?如果有的话,你认为 junit-ext 与之相比的竞争力在哪里呢?

胡凯:在我有了这个点子并进行了一些初步的工作后,我发现另外一个插件 junitext 作者的想法和我很相似(甚至我们都取了 ext 这样毫无个性的名字), junitext 是利用 java 的反射特性进行前验:

public class TestFillDatabase {
@Prerequisite(requires = “runningInRightEnvironement”, callee=“EnvironmentChecker”)// 反射
@Test public void fillData() {
// …
}
}

在所有的场景下,开发者都需要自行实现"EnvironmentChecker"(或者找到使用静态方法的第三方库)对环境进行判别。实现健壮的环境检查程序本身是很麻烦的工作,仅仅提供一套机制来检测环境、过滤测试还不能最大程度的方便开发者。对于“难者可为”, junitext 做的很好,但是开发者应该,也需要更容易的解决问题,也就是所谓的"易者易为",在这一点上 junitext 作的并不好,我在开发框架时特别注意了这一点,在 Junit-Ext 中对常见的环境检验提供了内建支持,譬如:
* 对操作系统的检测
* 对文件是否服存在的检测
* 对 Http 服务是否启动的检验
* 对 Socket 是否打开的检验
* 对某应用是否安装的检验

由于 Junit-Ext 使用的是强类型,IDE 可以在开发者编写测试时,提示出所有可用的 Checker,进一步的方便开发者使用这个框架。 开发者也可以通过实现 Junit-Ext 提供的 Checker 接口进行订制,做到“难者可为”,社区和 ThoughtWorks 一些团队的反馈也都印证“易者易为,难者可为”是一个正确的想法,从这个角度看,我认为 Junit-Ext 更具竞争力。

InfoQ 中文站:当前版本的核心特性有哪些?下一步的计划可以给我们介绍一下么?

胡凯:目前可以支持 Junit4.4, Junit4.5;支持 JDK5, JDK6;支持 Class 级别的环境检测;支持方法级别的环境检测;有内建的 Checkers;支持Spring Test Runner Junit-Ext 下一个版本的目标是支持 Junit4.6, 另外后续的版本会不断改进 Precondition ,以及支持自动的测试分类。

2009-06-04 01:012023
用户头像

发布了 197 篇内容, 共 50.3 次阅读, 收获喜欢 20 次。

关注

评论

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

抱着试一试的心态,没想到还真被录用了!年后我收到的第一个offer

android 程序员 移动开发

拥抱-Koin,放弃-Dagger吧!,android开发技术难点

android 程序员 移动开发

插件化库VirtualAPK详解,你头秃都没想到还能这样吧

android 程序员 移动开发

插件化框架解读之Android-资源加载机制详解(二),kotlin语法印章类

android 程序员 移动开发

我草-28岁就年薪百万??直到我看到这个Alibaba Android技术图谱

android 程序员 移动开发

手把手讲解--性能优化案例(2)app卡顿优化,androidsdk开发封装

android 程序员 移动开发

插件化框架解读之android系统服务实现原理(五),毕业工作5年被裁

android 程序员 移动开发

揭秘 Android 百万开发被迫转行背后的残酷真相,只是你没找对方向罢了

android 程序员 移动开发

我懵了,面试大厂被熟悉的App启动流程和RecycleView连环三问坑了

程序员 移动开发

我的副业已经成为了我的主业,Android软件开发面试题

android 程序员 移动开发

手把手教你打通车载蓝牙与手机app的音频信息传输&车载反向控制手机app

android 程序员 移动开发

手把手讲解IPC框架,成为一名合格Android架构师

android 程序员 移动开发

打造自己的Android常用知识体系,android音视频开发面试

android 程序员 移动开发

掌握Android和Java线程原理上,跨平台移动开发工具

android 程序员 移动开发

我把阿里、腾讯、字节跳动,flutter插件化

android 程序员 移动开发

我敢打赌!你从未见过如此简单的Dagger-导航---基于-Android-Studio-4-1

android 程序员 移动开发

手撕专有钉钉Android面试题完全指南,安卓开发入门书籍

android 程序员 移动开发

拿来吧你,Compose尝鲜初体验!,Android开发真等于废人

android 程序员 移动开发

搞了三年Android开发终于把线程、多线程和线程池全搞懂了,掌握这些核心知识(1)

android 程序员 移动开发

我是怎么把业务代码越写越复杂的 _ MVP - MVVM - Clean Architecture

android 程序员 移动开发

插件化&热修复系列——ClassLoader方案设计,开源至上

android 程序员 移动开发

手把手讲解-一个复杂动效的自定义绘制2,html5移动端开发框架

android 程序员 移动开发

把Flutter扩展到微信小程序端的探索,androidstudio汉化

android 程序员 移动开发

我是如何在一晚上拿到阿里巴巴Android研发offer的?,三年经验Android开发面经总结

android 程序员 移动开发

手撕专有钉钉Android面试题完全指南(1),2021年网易Android岗面试必问

android 程序员 移动开发

技术迭代迷茫?Android资深架构师教你如何打破这个局面!

android 程序员 移动开发

换个姿势,带着问题看Handler,android应用程序开发的流程

android 程序员 移动开发

插件化框架解读之Class文件与Dex文件的结构(一),Android详解

android 程序员 移动开发

搞Android开发为什么这么难?想哭了!,kotlin中文

android 程序员 移动开发

我的Android 求职简历,二本渣校,靠这份简历拿下BATJ等15家大厂Offer

android 程序员 移动开发

拔刀金九银十:2020年最新BAT大厂 Android 面试知识点,安卓开发入门到精通

android 程序员 移动开发

开源项目Junit-Ext发布_敏捷_李剑_InfoQ精选文章