1.什么是单元测试

单元测试是对软件中的最小可测试单元进行检查和验证的过程

单元测试是开发者编写一小段代码,用于检验被测代码的一个很小的,很明确的(代码)功能是否正确,执行测试单元就是为了证明某段代码的执行结果是否符合我们的预期。如果测试结果符合我们的预期,称之为测试通过,否则就是测试不通过。

2.了解junit5

junit是一个开源的java语言的单元测试框架。java方向使用最广泛的单元测试框架。使用java开发者都应当学习junit并且掌握单元测试的编写。要求Java版本最低为8。

selenium与junit的关系:

假如要实现一个灯泡,selenium就是灯泡,而junit就是电源

在idea 中使用junit,首先需要导入依赖:

在这里插入图片描述

3.常用注解

注解解释
@Test表示这是一个测试方法
@BeforeEach其他测试方法执行之前都要执行一遍
@AfterEach其他测试方法执行之后都要执行一遍
@BeforeAll其他所有方法执行之前只需要执行一遍
@AfterAll其他所有方法执行之后只需要执行一遍

【注意】使用AfterAll注解的方法必须定义为static

(1)@Test:表示这是一个测试方法

如下图,使用了@Test注解之后,就可以不用main方法就可以执行这个方法。

在这里插入图片描述

(2)@BeforeEach:其他方法执行之前都先执行一次。

如下图:在执行bbb方法与ccc方法之前都必须得先执行aaa方法

在这里插入图片描述

(3)@AfterEach:其他测试方法执行之后都必须执行一遍

如下图:测试方法在bbb与ccc在执行之后都必须执行测试方法aaa。
在这里插入图片描述
(4)@BeforeAll:其他所有方法执行之前都只需要执行一次

如下图:在bbb与ccc测试方法执行之前,aaa方法只执行一次
在这里插入图片描述
(5)@AfterAll:其他所有方法执行之后只需要执行一次

如下图:在bbb与ccc测试方法执行之后,aaa方法都只需要执行一次
在这里插入图片描述

以上就是Junit单元测试中的常用注解,此外还有一些注解:

注解解释
@ParameterizedTest表示这个方法是参数化测试(可以拥有参数)
@RepeatedTest方法可重复执行
@DisplayName为测试类或方法设置展示名称)
@Timeout表示测试方法如果超过了指定时间将会返回错误

4.断言

4.1.什么是断言

编写代码时,我们往往会做出假设,断言用于判断这些假设为真还是为假。因此断言表示为布尔表达式。

4.2.常用断言

方法说明
assertEquals(expect,actual)校验期望值与实际值是否匹配
assertNotEquals(expect,actual校验期望值与实际值是否不匹配
assertTrue()判断给定的布尔值是否为True
assertFalse()判断给定的布尔值是否为false
assertNull()判断给定的对象引用是否为null
assertNotNull()判断给定的对象引用是否不为null
assertSame()判断两个对象引用是否指向同一个对象
assertNotSame()判断两个对象引用是否指向不同的对象

【注意】如果断言失败,则后面的代码都不会执行,如果断言成功,则程序往下执行

(1) assertEquals(expect,actual):校验期望值与实际值是否匹配

assertNotEquals(expect,actual:校验期望值与实际值是否不匹配

断言成功,代码往下执行

在这里插入图片描述

断言失败,不会往下执行:

在这里插入图片描述

(2)assertTrue() 判断给定的布尔值是否为True
assertFalse() 判断给定的布尔值是否为false

在这里插入图片描述

(3)assertNull() 判断给定的对象引用是否为null
assertNotNull() 判断给定的对象引用是否不为null

在这里插入图片描述


5.用例执行顺序

junit的默认执行顺序是不确定的。官方文档没有明确给出。我们仍然可以使用junit里提供的方法来手动设置用例的执行顺序

文档中给出的排序方法有:方法的排序,标签的排序等等…

(1)方法的排序:@Order注解进行排序

在这里插入图片描述

为什么需要用到junit里的排序方法?

我们在编写测试用例的时候进行保持用例的独立性。
如果用例之间存在关联关系,那么就需要手动的指定用例的执行顺序。


6.测试套件Suite

通常把一组相关的测试称为一个测试套件(test suite)。

(1)指定类,添加到套件中并执行

在这里插入图片描述
(2)指定包,添加到套件中并执行

在这里插入图片描述

【注意】执行包下面所有以Test命名的文件中的所有@Test注解的用例

如果包下没有命名包含Test\tests的文件,则会提示找不到对应的用例。

在这里插入图片描述


7.参数化

@Parameterizedtest标注方法类型为参数化﹐不需要再添加@Test注解,如果添加了,该用例会多执行一遍

(1)单参数:@ValueSource(类型={参数1,参数2,…})

这里面的类型支持的有:
在这里插入图片描述
在这里插入图片描述

(2)多参数 @CsvSource

在这里插入图片描述这里可以手动指定分隔符:

在这里插入图片描述

(3)多参数

如果参数很多的话,我们可以借助文件注入的方式进行添加:@CsvSource(指定文件路径)

在这里插入图片描述
此外,我们还可以指定文件路径为本地文件路径:
在这里插入图片描述

【注意】数字类型的参数必须有值,否则会导致用例执行失败

(4)动态参数

  • 动态参数的单参数:@MethodSource(“”)

在这里插入图片描述

  • 动态参数的多参数

在这里插入图片描述


完!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐