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

本文深入剖析了JUnit中的Statement接口及其多种实现方式,包括Expectation、Fail等,并解释了这些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: )
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值