欢迎光临散文网 会员登陆 & 注册

Junit 单元测试框架基础知识

2023-05-12 14:10 作者:大丫头胖  | 我要投稿

1. Junit 简介

Junit 是 Java 编程语言的 单元测试 框架,用于编写和可重复运行的自动化测试。


2. 技术参数选取范围


3. Junit 基础知识

3.1 Junit 基础注解

单元测试题目中 @Test、@RunWith 参数化出出镜率非常的高,所以一定要多加注意。


@Test 

 用于表示注释的方法是一个 Junit 测试方法。

注意:测试方法的访问修饰符必须是 public,测试方法的返回值必须是 void


@Ignore 忽略此方法

有时候我们想暂时不运行某些测试方法\测试类,可以在方法前加上这个注解。

注意:可以忽略整个测试类。


@BeforeClass

当我们运行几个有关联的用例时,可能会在数据准备或其它前期准备中执行一些相同的命令,这个时候为了让代码更清晰,更少冗余,可以将公用的部分提取出来,放在一个方法里,在测试类所有用例运行之前 运行一次

注意:测试方法的访问修饰符必须是 public ,返回值必须是 void static 方法。


@AfterClass

跟 @BeforeClass 对应,在测试类里所有用例运行之后,运行一次。用于处理一些测试后续工作,例如清理数据,恢复现场。

注意:测试方法的访问修饰符必须是 public ,返回值必须是 void  static 方法。



@Before @After 

与 @BeforeClass 和 @AfterCalss 的区别在于,@Before 和 @After 不止运行一次,它会在每个用例运行之前和之后都运行一次。主要用于一些独立于用例之间的准备工作。

注意:测试方法的访问修饰符必须是 public,测试方法的返回值必须是 void


@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)

  • @SuiteClasses(value = { TestA.class, TestB.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,所有方法运行都会自动检测是否超时。

① TemporaryFolder Rule

测试的时候,我们经常需要创建一个临时文件/文件夹,但是在测试类中管理这些文件/文件夹有时候会很麻烦,这时使用 TemporaryFolderRule 就能很好的帮我们管理测试过程中的文件的创建与删除。


② TestName Rule

用于在测试执行过程中获取测试方法名称。


③ ExternalResource Rule

ExternalResource 是一个规则(如TemporaryFolder)的基类,在测试前构造外部资源(一个文件、套接字、服务器、数据库连接等),并保证在测试后将资源释放。


3.4 Junit 测试 private 方法

Reflection(反射) 是 Java 程序开发语言的特征之一,反射可以在运行时获取一个类的所有信息,(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。


4. 断言

断言(assertion)是一种在程序中的一阶逻辑(如,一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果:当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。

单元测试的题目中,往往会指定使用具体的断言方法,考察的断言方法不是在 org.junit.Assert 类中,那么就在 org.hamcrest.MatcherAssert 类中。


4.1 Junit Assert 断言


4.2 Hamcrest MatcherAssert 断言

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



Junit 单元测试框架基础知识的评论 (共 条)

分享到微博请遵守国家法律