简介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的使用相关推荐

  1. JUnit的Rule的使用

    我们在使用JUnit的时候,为了使测试结果更加清晰明确,会有以下的需求: 一个类有多个测试方法,想知道日志是哪个测试方法 想在所有测试方法的前后加上一些语句,用于初始化和销毁一些资源 如果一个测试方法 ...

  2. junit rule_使用JUnit的ExpectedException和@Rule测试自定义异常

    junit rule 异常测试 为什么要测试异常流? 就像所有代码一样,测试覆盖率在代码和应该产生的业务功能之间写了一个合同,从而为您提供了代码的有效文档 ,以及可以尽早且经常强调功能的附加功能. 我 ...

  3. 使用JUnit的ExpectedException和@Rule测试自定义异常

    异常测试 为什么要测试异常流? 就像所有代码一样,测试覆盖率会在代码和应该生成的业务功能之间写一个合同,从而为您提供代码的有效文档 ,以及增加的尽早且经常强调功能的功能. 我不会介绍测试的许多好处,而 ...

  4. junit5_使用Junit测试名称

    junit5 命名测试 创建Junit测试时,通常没有方法名称的实际使用. Junit运行程序使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方法的名称用于文档目 ...

  5. junit测试类叫什么名字_使用Junit测试名称

    junit测试类叫什么名字 命名测试 当我们创建Junit测试时,通常没有方法名称的实际使用. Junit运行器使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方 ...

  6. junit:junit_简而言之,JUnit:测试结构

    junit:junit 尽管存在有关JUnit测试的书籍和文章,但我仍然经常遇到程序员,他们至多对这个工具及其正确用法都不甚了解. 因此,我想到了编写多部分教程的想法,从我的角度解释了要点. 也许在本 ...

  7. 使用Junit测试名称

    命名测试 在创建Junit测试时,通常没有实际使用该方法的名称. Junit运行程序使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方法的名称用于文档目的. 人们 ...

  8. 简而言之,JUnit:测试结构

    尽管存在关于JUnit测试的书籍和文章,但我仍然经常遇到程序员,他们至多对这个工具及其正确用法都不甚了解. 因此,我想到了编写多部分教程的想法,从我的角度解释了要点. 也许在这个小型系列中采用的动手方 ...

  9. easymock_EasyMock注释– JUnit 4

    easymock EasyMock annotations can be used to create Mock objects. We can also tell the EasyMock fram ...

  10. JUnit 5 简介

    转自:https://www.ibm.com/developerworks/cn/java/j-introducing-junit5-part1-jupiter-api/index.html http ...

最新文章

  1. 60 张图详解 98 个常见网络概念
  2. Bootstrap框架的基本使用
  3. c语言stoi函数源码,一系列相关函数的通用函数(例如std::stoi,std::stof,std::stod等)...
  4. 嵌入式新人发展的总体方向
  5. 记录安装php与apache不兼容的过程
  6. 【渝粤题库】陕西师范大学200771 可视化程序设计
  7. 【TypeScript系列教程05】保留关键字
  8. java 原子类_小学妹教你并发编程的三大特性:原子性、可见性、有序性
  9. access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
  10. mysql 服务器管理员_mysql 查看数据库管理员
  11. 喀什大学计算机科学与技术学院在哪个校区,2021年喀什大学有几个校区,大一新生在哪个校区...
  12. 罗永浩团队于天津成立品牌管理公司
  13. 【Docker】elasticsearch 监控工具 elasticsearch-HQ
  14. python绘制turtle心电图代码_python的生态系统是由标准库和第三方库组成的,turtle库是其标准库,所以不需要安装。_学小易找答案...
  15. Java抽象类与接口的区别:
  16. 力软敏捷开发框架7.0.6源码
  17. C语言编写贪吃蛇小游戏
  18. 如何用计算机算分数乘法,分数乘法怎么算
  19. 学习:使用python+selenium实现路由器登陆账号密码爆破
  20. 甘特图在Vue中的应用篇

热门文章

  1. Android 获取本地视频列表
  2. 中南大学计算机学院王瑞,中南大学优秀毕业生.xls
  3. 小程序-腾讯视频插件
  4. 程序猿郭小喵曾经的实习故事
  5. iphone 计算文件长度
  6. [09-Dec-2012] 《少年pi的奇幻之旅》 -推荐
  7. 计算机英语趣味知识竞赛题库,2019年小学四年级英语趣味知识竞赛试题
  8. [py] 考拉兹猜想
  9. 软件自动化测试的的设计标准和适用范围
  10. win10输入法添加美式键盘(符合Win7习惯)