美文网首页程序员JAVA_UT
【JAVA-UT】11、Runner--使用什么来运行你,我的U

【JAVA-UT】11、Runner--使用什么来运行你,我的U

作者: 码术张 | 来源:发表于2018-02-25 17:47 被阅读422次

文|码术张

一、什么是Runner

下面这个UT,对您来说,现在应该是小菜一碟了。

public class ResultTest {
  @Test
  public void should_returnString() {
    // given
    String expectedString = "downLoadStatus: Fail, failureReason: cannot connect";
    Result result = new Result("Fail", "cannot connect");

    // when
    String realString = result.toString();

    // then
    Assert.assertEquals(expectedString, realString);
  }
}

given、when、then下的语句,各自描述了:
条件的设置;
执行被测功能;
结果是否符合期望的验证。

不过,这还不是全部。
在这个“家庭”里,还有一个特别重要的成员。
是谁呢?
Runner。

每一个测试类,都有一个Runner。
什么是Runner?
Runner是"编译器",也是"CPU"。

它是“编译器”,是因为Runner会做这两件事:
1,预处理。
判断语法是否规范。
比如@Test注释的方法,其返回值应当是void。
若违反了要求,将这“作品"退回作者,并附上评语。
如果合格,进入下一处理阶段。
2,“翻译”。
将测试类进行分解、排序。
分解为一个个执行单元,并排序。
这就好比将A语言的源程序翻译为B语言的等价程序。

它是"CPU",是因为Runner的有一个方法,
run方法
runner.run()
调用这个方法后,代码才开始进入运行阶段。
这就是为什么称它为runner的原因吧。

二、如何使用Runner

Junit提供了三种Runner:
BlockJUnit4ClassRunner
Suite
Parameterized
第3种不常用,所以这里不介绍。

1. BlockJUnit4ClassRunner的使用

BlockJUnit4ClassRunner是Junit4默认的runner。
使用方式1:
@RunWith(BlockJUnit4ClassRunner.class)
使用方式2:
BlockJUnit4ClassRunner.class的别名是JUnit4.class。
@RunWith(JUnit4.class)
使用方式3:
不使用RunWith语句。

开头的例子,使用了方式3。
分别用方式1、方式2改写如下:

@RunWith(BlockJUnit4ClassRunner.class)
public class ResultTest {
 ...
}
@RunWith(JUnit4.class)
public class ResultTest {
 ...
}
2. Suite的使用

Suite是将多个runner串联起来的一个runner。
如何使用Suite呢?

  1. 添加RunWith语句
    @RunWith(Suite.class)
  2. 添加SuiteClasses语句
    @SuiteClasses({Test1.class, Test2.class...})
    比如有两个测试类,分别测试ipv4、ipv6模式下的ping功能。
public class PingInIpv4modeTest {
  @Test
  public void printIpv4() {
    System.out.println("This is ipv4.");
  }
}
public class PingInIpv6modeTest {
  @Test
  public void printIpv6() {
    System.out.println("This is ipv6.");
  }
}

要将它们合并为一个整体,就需要用到Suite

@RunWith(Suite.class)
@Suite.SuiteClasses({
    PingInIpv4modeTest.class,
    PingInIpv6modeTest.class
})
public class PingTest {
    //nothing
}

当运行PingTest类时,就会运行SuiteClasses中所有的类。
如下图所示:


result.PNG

需要注意的是:
一个class声明为Suite后,其内部的方法已经无意义,也无法运行。
在上面的PingTest中,加入一个方法testInSuite,运行这个方法,会出现错误:

@RunWith(Suite.class)
@Suite.SuiteClasses({
    PingInIpv4modeTest.class,
    PingInIpv6modeTest.class
})
public class PingTest {
  @Test
  public void testInSuite() {
    System.out.println("it is testInSuite");
  }
}
result-of-running-method-in-suite.PNG

相关文章

  • 【JAVA-UT】11、Runner--使用什么来运行你,我的U

    文|码术张 一、什么是Runner 下面这个UT,对您来说,现在应该是小菜一碟了。 given、when、then...

  • android自定义日志组件

    在Android开发中经常会使用日志来进行调试、记录运行状态、定位问题,但是系统提供的日志组件(android.u...

  • 设置,读取cookie的方法

    因为cookie读取需要通过域名来的,需要使用服务器来运行,我这里使用vue脚手架来运行的

  • UITableViewAgent:一个闭包搞定UITableVi

    示例程序 要运行示例项目,克隆仓库,并首先从Example目录运行' pod install '。 安装与使用 U...

  • Appium:Python 学习 demo

    使用环境: Python Demo 运行结果 Blog: 简书:https://www.jianshu.com/u...

  • PHP指定版本运行composer

    通过使用指定版本的php来运行composer.phar 后面加上composer命令来使用 .phar是什么格式...

  • Windows Tricks | 为你的U盘自定义个图标

    如果你认为Windows下自己的U盘图标过于单调,可以使用以下的方式来为自己的U盘自定义图标. 为U盘自定义图标 ...

  • 2.5 内存

    2.5 内存 本节必须掌握的知识点: u内存的知识 u正在运行的程序所占的内存空间 uMOV指令对内存的操作使用 ...

  • u行侠u盘装xp系统教程

    教程导读 什么是U盘装XP系统,怎么使用U盘装XP系统?怎么使用U行侠装XP系统?此教程将详细介绍如何使用U盘装X...

  • U-运行

    组织不是单一结构,而是三重结构。它们沿着三个主轴演进:对现有价值创造流程的整合,持续创新和学习的平行系统,以及与演...

网友评论

    本文标题:【JAVA-UT】11、Runner--使用什么来运行你,我的U

    本文链接:https://www.haomeiwen.com/subject/pqolxftx.html