Junit 单元测试框架基础知识
1. Junit 简介

Junit 是 Java 编程语言的 单元测试 框架,用于编写和可重复运行的自动化测试。
2. 技术参数选取范围

3. Junit 基础知识

3.1 Junit 基础注解
单元测试题目中 @Test、@RunWith 参数化出出镜率非常的高,所以一定要多加注意。
@Ignore 忽略此方法
有时候我们想暂时不运行某些测试方法\测试类,可以在方法前加上这个注解。
注意:可以忽略整个测试类。
@BeforeClass
注意:测试方法的访问修饰符必须是 public ,返回值必须是 void 的 static 方法。
@AfterClass
跟 @BeforeClass 对应,在测试类里所有用例运行之后,运行一次。用于处理一些测试后续工作,例如清理数据,恢复现场。
注意:测试方法的访问修饰符必须是 public ,返回值必须是 void 的 static 方法。
@Before @After
与 @BeforeClass 和 @AfterCalss 的区别在于,@Before 和 @After 不止运行一次,它会在每个用例运行之前和之后都运行一次。主要用于一些独立于用例之间的准备工作。
@Runwith
测试运行器则决定了用什么方式偏好去运行这些测试集(Test-Suite)/类(Test-Case)/方法(Test-Method)。
@Runwith 就是放在测试类名之前,用来确定这个类怎么运行的。也可以不标注,会使用默认运行器。常见的运行器有:
@RunWith(Parameterized.class) 参数化运行器,配合 @Parameters 使用 Junit 的参数化功能
@RunWith(Suite.class) @SuiteClasses({ATest.class,BTest.class,CTest.class}) 测试集运行器配合使用测试集功能
@RunWith(JUnit4.class) Junit4的默认运行器

@RunWith 实现参数化测试
如一个对考试分数进行评价的函数,返回值分别为“优秀,良好,一般,及格,不及格”。在编写测试的时候,如果编写 5 个测试方法,进而测试 5 种情况,是一件很麻烦的事情。
除此之外,还有一种通过构造函数来绑定测试参数的编码方式,大家可以根据比赛题目的要求分情况编码即可。
@RunWith 实现用例套件化测试
测试套件意味着捆绑几个单元测试用例并且一起执行他们。在 JUnit 中,@RunWith 和 @Suite 注释用来运行套件测试。涉及到测注解
@RunWith(Suite.class)
3.2 Junit 测试方法执行顺序

写 Junit 测试用例时,有时候需要按照定义顺序执行我们的单元测试方法,比如如在测试数据库相关的用例时候要按照测试插入、查询、删除的顺序测试。如果不按照这个顺序测试可能会出现问题。而JUnit测试时默认的顺序是随机的。所以这时就需要有办法要求 Junit 在执行测试方法时按照我们指定的顺序来执行。
Junit 是通过 @FixMethodOrder 注解来控制测试方法的执行顺序的。@FixMethodOrder 注解的参数是 org.junit.runners.MethodSorters 对象, 在枚举类org.junit.runners.MethodSorters 中 定义了如下三种顺序类型:
MethodSorters.JVM(按照JVM得到的方法顺序,也就是代码中定义的方法顺序)
MethodSorters.DEFAULT(默认的顺序)
MethodSorters.NAME_ASCENDING(按方法名字母顺序执行)
3.3 Junit Rule

Junit 有了Rule,才使得有更多的扩展性,能做更多的功能测试。@Rule的特点是:在一个class中所有的 @Test 标注过的测试方法都会共享这个Rule,例如定义一个Timeout,所有方法运行都会自动检测是否超时。
② TestName Rule
用于在测试执行过程中获取测试方法名称。
③ ExternalResource Rule
ExternalResource 是一个规则(如TemporaryFolder)的基类,在测试前构造外部资源(一个文件、套接字、服务器、数据库连接等),并保证在测试后将资源释放。

4. 断言

断言(assertion)是一种在程序中的一阶逻辑(如,一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果:当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。
单元测试的题目中,往往会指定使用具体的断言方法,考察的断言方法不是在 org.junit.Assert 类中,那么就在 org.hamcrest.MatcherAssert 类中。
4.1 Junit 断言

一般匹配符断言:Junit 4 结合 Hamcrest 提供了一个全新的断言语法——assertThat。测试人员可以只使用 assertThat 一个断言语句,结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想。