返回顶部
首页 > 资讯 > 精选 >怎样使用Rule
  • 211
分享到

怎样使用Rule

2023-06-17 11:06:29 211人浏览 安东尼
摘要

这期内容当中小编将会给大家带来有关怎样使用Rule,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。讨论一种扩展JUnit4的方式,即,直接修改Test Runner的实现(BlockJUnit4ClassR

这期内容当中小编将会给大家带来有关怎样使用Rule,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

讨论一种扩展JUnit4的方式,即,直接修改Test Runner的实现(BlockJUnit4ClassRunner)。但这种方法显然不便于灵活地添加或删除扩展功能。这里将使用JUnit4.7才开始引入的扩展方式--Rule来实现相同的扩展功能。

1. Rule

Rule是JUnit4.7才开始提供的一种扩展方式,它能够替代大部分已有的Runner扩展。JUnit包含两种Rule Annotation:@ClassRule与@Rule。@ClassRule应用于测试类中的静态变量,而@Rule应用于成员变量;相同地是,这些变量必须是TestRule接口的实例,且访问修饰符必须为public。

对BlockJUnit4ClassRunner进行了扩展,被扩展的方法是methodBlock,现在我们来看看该方法体中的代码:

protected Statement methodBlock(FrameworkMethod method) {  Object test;  try {  test= new ReflectiveCallable() {  @Override protected Object runReflectiveCall() throws Throwable {  return createTest();  }  }.run();  } catch (Throwable e) {  return new Fail(e);  }   Statement statement= methodInvoker(method, test);  statement= possiblyExpectingExceptions(method, test, statement);  statement= withPotentialTimeout(method, test, statement);  statement= withBefores(method, test, statement);  statement= withAfters(method, test, statement);  statement= withRules(method, test, statement);  return statement;  }

但在BlockJUnit4ClassRunner中,possiblyExpectingExceptions(),withPotentialTimeout(),withBefores()和withAfters()都已经被标注为过时,JUnit建议使用Rule来替代这些方法的功能。

2. TestLogRule

如第1节所述,Rule Annotation要作用于TestRule接口的实例,那么就要先创建一个TestRule的实现类。

public class TestLogRule implements TestRule {  private static final DateFORMat format = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss_SSS");  @Override public Statement apply(Statement base, Description description) {  TestLogger testLogger = description.getAnnotation(TestLogger.class);  if (testLogger != null) {  StringBuilder log = new StringBuilder(format.format(new Date()));  log.append(" ").append(description.getClassName()).append("#")  .append(description.getMethodName()).append(": ")  .append(testLogger.log());  System.out.println(log.toString());  }  return base;  }  }

如上所示,TestLogRule与上篇博文中的LoggedRunner的代码有许多相同之处,功能则都是打印出指定的日志,每行日志又以当时的执行时间与完整方法名作为前缀。

3. 使用Rule的CalculatorTest

下面是新的测试类CalculatorTest,它将不使用BlockJUnit4ClassRunner的扩展LoggedRunner作为测试执行器,所以该类没有使用@RunWith(LoggedRunner.class),那么在执行该测试类时仍然会使用BlockJUnit4ClassRunner。

public class CalculatorTest {  private static Calculator calculator = null;  @Rule public TestLogRule testLogRule = new TestLogRule();  @BeforeClass public static void createCalculator() {  calculator = new Calculator();  }  @Test @TestLogger(log = "a simple division")  public void simpleDivide() {  int value = calculator.divide(8, 2);  Assert.assertTrue(value == 4);  }  @Test(expected = ArithmeticException.class)  @TestLogger(log = "divided by zero, and an ArithmeticException thrown.")  public void dividedByZero() {  calculator.divide(8, 0);  }  }

与上篇博文中的CalculatorTest相比,本文中的CalculatorTest除了没有使用LoggedRunner之外,还多了两行代码:

@Rule public TestLogRule testLogRule = new TestLogRule();

在执行单元测试方法之前,BlockJUnit4ClassRunner会调用TestRule/TestLogRule中的apply()方法,即,会先打印出日志内容。

4. 小结

使用Rule对JUnit进行扩展,能够避免对默认Runner的扩展,为测试类添加或移除Rule十分方便,而且Rule实现类本身也能很方便地被复用。

上述就是小编为大家分享的怎样使用Rule了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎样使用Rule

本文链接: https://lsjlt.com/news/288744.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样使用Rule
    这期内容当中小编将会给大家带来有关怎样使用Rule,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。讨论一种扩展JUnit4的方式,即,直接修改Test Runner的实现(BlockJUnit4ClassR...
    99+
    2023-06-17
  • RedHat 4,5,6怎样配置RAW或SCSI Rule
    这篇文章将为大家详细讲解有关RedHat 4,5,6怎样配置RAW或SCSI Rule,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 RedHat 4 R...
    99+
    2024-04-02
  • 怎样使用JSON.stringify()
    本篇文章给大家分享的是有关怎样使用JSON.stringify(),小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JSON是一种轻量级数据格式,...
    99+
    2024-04-02
  • css怎样使用
    小编给大家分享一下css怎样使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!给DIV设置display:inline-bloc...
    99+
    2024-04-02
  • css中的column-rule-width属性怎么用
    这篇文章主要为大家展示了“css中的column-rule-width属性怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css中的column-rule-...
    99+
    2024-04-02
  • 怎么样使用CSS
    这篇文章给大家分享的是有关怎么样使用CSS的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 内联方式:样式定义在单个的HTML元素中 内部样式表:样式定义在HTML页的头元素中...
    99+
    2024-04-02
  • 怎样使用pt-query-digest
    这期内容当中小编将会给大家带来有关怎样使用pt-query-digest,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.语法及重要选项pt-query-digest [...
    99+
    2024-04-02
  • CSS中padding怎样使用
    CSS中padding怎样使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。CSS padding属性用法详解padding属性是css用...
    99+
    2024-04-02
  • AJAX的使用是怎样
    AJAX的使用是怎样,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 首先是一个创建AJAX的函数: 代...
    99+
    2024-04-02
  • vue中怎样使用bimface
    本篇文章给大家分享的是有关vue中怎样使用bimface,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 安装 vue 脚手架这里还是使用 Vue CLI通过如下命令,全局安...
    99+
    2023-06-22
  • 在html怎样使用radio
    在HTML中使用``标签来创建单选按钮。示例代码:```htmlOption 1Option 2Option 3```在上面的示例中...
    99+
    2023-09-05
    html
  • kylin怎样安装使用
    这篇文章给大家分享的是有关kylin怎样安装使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 环境我选的kylin版本是1.5.4,因为买了一本叫《Apache kylin权威指南》,书中以1.5.x...
    99+
    2023-06-02
  • 如何使用Hybris commerce的promotion rule进行促销活动
    这篇文章主要讲解了“如何使用Hybris commerce的promotion rule进行促销活动”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Hybris commerce的pr...
    99+
    2023-06-04
  • 怎样使用rpm安装MySQL
    这篇文章将为大家详细讲解有关怎样使用rpm安装MySQL,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用rpm安装MySQL的方法:首先下载rpm包,并开始安装serv...
    99+
    2024-04-02
  • Javascript怎样使用SessionStorage和LocalStorage
    目录前言SessionStorage和LocalStorage简介如何使用SessionStorage和LocalStorageLocalStorage与SessionStorage...
    99+
    2024-04-02
  • 怎样使用float与inline-block
    这期内容当中小编将会给大家带来有关怎样使用float与inline-block,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先是兼容性float的话完全不用担心什么浏览...
    99+
    2024-04-02
  • HTML中怎么使用样式
    这篇文章主要介绍了HTML中怎么使用样式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML中怎么使用样式文章都会有所收获,下面我们一起来看看吧。HTML 水平线,<h...
    99+
    2024-04-02
  • python怎样使用装饰器
    这篇文章将为大家详细讲解有关python怎样使用装饰器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用装饰器def makebold(f): return&n...
    99+
    2024-04-02
  • HTML样式表怎么使用
    这篇文章主要介绍了HTML样式表怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML样式表怎么使用文章都会有所收获,下面我们一起来看看吧。 如果某些属性在分歧的花色...
    99+
    2024-04-02
  • 怎样在Idea中使用Git
    怎样在Idea中使用Git,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。IDEA同步远程分支信息在Idea视图中GIT的分支信息在右下角,如果我们在remote新建了分支,...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作