JUnit 4.7学习笔记(四)——Statement

上次说完了MethodRule之后,是时候说说Statement这个东西是怎么回事了。

首先我们来看一下org.junit.runners.BlockJUnit4ClassRunner中执行测试的核心代码:

protected void runChild(FrameworkMethod method, RunNotifier notifier) {
EachTestNotifier eachNotifier= makeNotifier(method, notifier);
if (method.getAnnotation(Ignore.class) != null) {
eachNotifier.fireTestIgnored();
return;
}

eachNotifier.fireTestStarted();
try {
methodBlock(method).evaluate();
} catch (AssumptionViolatedException e) {
eachNotifier.addFailedAssumption(e);
} catch (Throwable e) {
eachNotifier.addFailure(e);
} finally {
eachNotifier.fireTestFinished();
}
}


而methodBlock()方法返回的就是Statement对象。它里面就只有一个接口方法:

package org.junit.runners.model;


/**
* Represents one or more actions to be taken at runtime in the course
* of running a JUnit test suite.
*/
public abstract class Statement {
/**
* Run the action, throwing a {@code Throwable} if anything goes wrong.
*/
public abstract void evaluate() throws Throwable;
}


注释很直白的说明了它就是负责执行动作以及抛出相应执行过程中的异常。那实际上有多少种statement的实现,而其各自的evaluate又是在干嘛的呢?我们今天就来探讨一下。我发现所有可以在junit内部定义的内部使用的Statement包括以下几个:
[img]http://dl.iteye.com/upload/attachment/183303/1b57ef16-e58b-38d9-bc89-cf5c82c850ea.gif[/img]

它们都是在org.junit.internal.runners.statements包里面。下面简单介绍它们做的东西:
[table]
|类名|作用|
|ExpectedException|用于检测标明期待出现错误的测试方法是否通过了测试(无异常抛出),或者抛出的异常和期待值不一样。|
|Fail|直接出错,中断所有后续的步骤。|
|FailOnTimeout|开一个线程来跑测试方法,并且通过Thread.join来判定该线程是否超时。如果出错或者超时都会认为是失败。|
|InvokeMethod|通过映射机制执行不带参数的测试方法|
|RunAfters|在执行完测试目标方法之后,尝试执行所有的@After和@AfterClass方法,并且把这个过程中的所有遇到的错误统一输出处理。注意@After方法是全部都会尝试执行一遍的,而不会因为中途遇到异常就会被中断。即使测试方法本身出现错误,@After和@AfterClass方法也会被执行一次!|
|RunBefores|尝试先运行所有@BeforeClass和@Before方法,和RunAfters不一样,只要途中遇到一个方法出错就会终止连锁执行行为。|
[/table]

为什么Statement我只是简单介绍一下呢?因为大部分的Statement将被MethodRule机制所代替,所以大家只要了解一下个概念及其功能就好了。

下次来复习一下4.1的@RunWith标记及自定义测试运行引擎的方法(主要是很不幸我之前的学习笔记弄丢了 :cry: )
JUnit学习笔记精要》是一本介绍JUnit测试框架的学习资料,可以从CSDN下载。JUnit是一个开源的Java单元测试框架,用于简化和自动化开发者编写和执行单元测试的过程。JUnit学习对于提高代码质量、减少bug的产生以及提高开发效率具有重要意义。 这本《JUnit学习笔记精要》将帮助读者从零开始掌握JUnit的基本概念和用法。书中首先介绍了JUnit的起源和发展历程,让读者了解JUnit的背景和重要性。然后详细讲解了JUnit的安装和配置,帮助读者快速上手使用该测试框架。 接下来,书中深入介绍了JUnit的各种注解和断言方法。JUnit的注解用于标记测试方法,通过使用不同的注解,可以控制测试方法的执行顺序、重复执行次数等。而JUnit的断言方法则用于验证测试结果是否符合预期。书中通过大量的示例代码和实际案例,详细讲解了如何使用这些注解和断言方法。 此外,书中还介绍了如何构建复杂的测试套件、如何使用参数化测试和如何处理异常测试。这些高级主题能够帮助读者进一步提升自己的单元测试技能,实现更全面的测试覆盖和更准确的测试结果。 总之,《JUnit学习笔记精要》是一本系统、实用的学习资料,适合想要学习JUnit的开发者。通过下载这本书,读者可以更好地理解和掌握JUnit的各种概念和用法,提高软件开发的质量和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值