JUnit之Rule的使用
简介JUnit之Rule的简单用法。为分析JUnit相关源代码做点准备。
Rule是一个用于测试单元类如MyTest中定义一个域的标注,该域must be public, not static, and a subtype of org.junit.rules.MethodRule。
package org.junit;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Rule {
}
Kent Beck曾经写过一篇文章<Interceptors in JUnit>,虽然最后叫Rule,但仍然起拦截器/Interceptor的作用——即在运行测试的前后添加一些有用的代码。
【注:JUnit4.9开始,MethodRule被deprecated,TestRule取代它。MethodRule接口定义的唯一方法:
Statement apply(Statement base, FrameworkMethod method, Object target);
TestRule的对应物:
Statement apply(Statement base, Description description);
】(严重影响yqj2065阅读4.8.2源代码的心情)
①先为MyRule准备一个Statement
package myTest.rule;
import static tool.Print.*;//pln(Object)
import org.junit.runners.model.Statement;
public class MyStatement extends Statement {private final Statement base;public MyStatement( Statement base ) {this.base = base;}@Override public void evaluate() throws Throwable {pln( "before...sth..sth" );try {base.evaluate();} finally {pln( "after...sth..sth" );}}
}
②定义MyRule
package myTest.rule;
//import org.junit.runner .Description;
import org.junit.rules.MethodRule;
import org.junit.runners.model.Statement;
import org.junit.runners.model.FrameworkMethod;
public class MyRule implements MethodRule {@Overridepublic Statement apply( Statement base, FrameworkMethod method, Object target ) {return new MyStatement( base );}
}
③最后在测试单元类MyTest中使用Rule
package myTest.rule;
import org.junit.Rule;
import org.junit.Test;
public class MyTest {@Rulepublic MyRule myRule = new MyRule();@Testpublic void testCase() {System.out.println( "testCase()..." );}
}
运行testCase()的输出:
before...sth..sth
testCase()...
after...sth..sth
JUnit之Rule的使用相关推荐
- JUnit的Rule的使用
我们在使用JUnit的时候,为了使测试结果更加清晰明确,会有以下的需求: 一个类有多个测试方法,想知道日志是哪个测试方法 想在所有测试方法的前后加上一些语句,用于初始化和销毁一些资源 如果一个测试方法 ...
- junit rule_使用JUnit的ExpectedException和@Rule测试自定义异常
junit rule 异常测试 为什么要测试异常流? 就像所有代码一样,测试覆盖率在代码和应该产生的业务功能之间写了一个合同,从而为您提供了代码的有效文档 ,以及可以尽早且经常强调功能的附加功能. 我 ...
- 使用JUnit的ExpectedException和@Rule测试自定义异常
异常测试 为什么要测试异常流? 就像所有代码一样,测试覆盖率会在代码和应该生成的业务功能之间写一个合同,从而为您提供代码的有效文档 ,以及增加的尽早且经常强调功能的功能. 我不会介绍测试的许多好处,而 ...
- junit5_使用Junit测试名称
junit5 命名测试 创建Junit测试时,通常没有方法名称的实际使用. Junit运行程序使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方法的名称用于文档目 ...
- junit测试类叫什么名字_使用Junit测试名称
junit测试类叫什么名字 命名测试 当我们创建Junit测试时,通常没有方法名称的实际使用. Junit运行器使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方 ...
- junit:junit_简而言之,JUnit:测试结构
junit:junit 尽管存在有关JUnit测试的书籍和文章,但我仍然经常遇到程序员,他们至多对这个工具及其正确用法都不甚了解. 因此,我想到了编写多部分教程的想法,从我的角度解释了要点. 也许在本 ...
- 使用Junit测试名称
命名测试 在创建Junit测试时,通常没有实际使用该方法的名称. Junit运行程序使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方法的名称用于文档目的. 人们 ...
- 简而言之,JUnit:测试结构
尽管存在关于JUnit测试的书籍和文章,但我仍然经常遇到程序员,他们至多对这个工具及其正确用法都不甚了解. 因此,我想到了编写多部分教程的想法,从我的角度解释了要点. 也许在这个小型系列中采用的动手方 ...
- easymock_EasyMock注释– JUnit 4
easymock EasyMock annotations can be used to create Mock objects. We can also tell the EasyMock fram ...
- JUnit 5 简介
转自:https://www.ibm.com/developerworks/cn/java/j-introducing-junit5-part1-jupiter-api/index.html http ...
最新文章
- 60 张图详解 98 个常见网络概念
- Bootstrap框架的基本使用
- c语言stoi函数源码,一系列相关函数的通用函数(例如std::stoi,std::stof,std::stod等)...
- 嵌入式新人发展的总体方向
- 记录安装php与apache不兼容的过程
- 【渝粤题库】陕西师范大学200771 可视化程序设计
- 【TypeScript系列教程05】保留关键字
- java 原子类_小学妹教你并发编程的三大特性:原子性、可见性、有序性
- access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
- mysql 服务器管理员_mysql 查看数据库管理员
- 喀什大学计算机科学与技术学院在哪个校区,2021年喀什大学有几个校区,大一新生在哪个校区...
- 罗永浩团队于天津成立品牌管理公司
- 【Docker】elasticsearch 监控工具 elasticsearch-HQ
- python绘制turtle心电图代码_python的生态系统是由标准库和第三方库组成的,turtle库是其标准库,所以不需要安装。_学小易找答案...
- Java抽象类与接口的区别:
- 力软敏捷开发框架7.0.6源码
- C语言编写贪吃蛇小游戏
- 如何用计算机算分数乘法,分数乘法怎么算
- 学习:使用python+selenium实现路由器登陆账号密码爆破
- 甘特图在Vue中的应用篇