通过本文的介绍,您可以了解到什么是 J">Unit,它有什么用处,JUnit 4.10 有什么新特性,并且如何应用。
JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),主要供 Java 开发人员编写单元测试。在极限编程和重构中被极力推荐使用的一个工具,因为它可以大大地提高开发的效率。那么大家就要问了,测试代码如何提高开发效率呢?不错,编写测试代码本身就是一件费时费力的事情,它的好处究竟在哪里呢?
使用 JUnit 的好处主要有那么几点:
对于极限编程而言,在编写代码之前写测试代码,这样强制要求程序员在写代码之前好好的思考代码的功能和逻辑,写一点测一点就可以避免回归错误的发生,对于重构而言也是相同的。 可以使测试代码与产品代码分开。 针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。 易于集成到测试人员的构建过程中,JUnit 和 Ant 的结合可以实施增量开发。 JUnit 是公开源代码的,可以进行二次开发。 可以方便地对 JUnit 进行扩展。
了解了 JUnit 的一些好处之后,我们来看一下 JUnit 的框架组成:
对测试目标进行测试的方法与过程集合,可称为测试用例 (TestCase)。 测试用例的集合,可容纳多个测试用例 (TestCase),将其称作测试包 (TestSuite)。 测试结果的描述与记录 (TestResult) 。 测试过程中的事件监听者 (TestListener)。 每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素 (TestFailure) 。 JUnit
Framework 中的出错异常(AssertionFailedError)。
JUnit 4.10 的新功能介绍
JUnit 自面世以来,陆陆续续发布了很多个版本。2011 年 10 月份,JUnit 4.10 发布。它对于之前的版本究竟有些怎样的不同呢?又会带来怎样的一些好处呢?下面我们将为您揭晓。
RuleChain
首先,让我们先来认识一下 Rule。在 JUnit4.7 中已经引入了新特性 Rule,总的来说,Rule 是 JUnit 的一种扩展机制,它可以很灵活的添加或重新定义每个测试方法或类的行为,测试人员能重新利用或扩展 JUnit 提供的规则,也可以定义自己的规则。
在 JUnit 4.10 中又引入了一个新的特性 RuleChain,用来组织和排序 Rule。下面一些代码来做一个直观的演示。
清单 1. RuleChain 演示代码
public class LoggingRule implements TestRule { private final String note; public LoggingRule(final String note) { this.note = note; } public Statement apply(final Statement base, final Description description) { System.out.println("rule applied: " + note);// 当 rule 被使用时进行打印 return base; } } public class TestWithRuleChain { @Rule // 通过打印 log 来记录在 rulechain 下 rule 的执行顺序 public TestRule chain = RuleChain.outerRule(new LoggingRule("outer")) .around(new LoggingRule("middle")) .around(new LoggingRule("inner")); @Test public void testSomeMethod() { System.out.println("test started"); } }
运行的结果如下:
rule applied: inner rule applied: middle rule applied: outer test started
我们可以看到 RuleChain 里规则的执行顺序,最内层的规则最先被执行完。例子中的方法 outerRule 返回一个 TestRule,这个方法通常作为 RuleChain 的起始点。方法 around 会创建并返回一个新的 RuleChain,会在当前 RuleChain 的基础上将下一个规则包含进来。