文章目录
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()判断给定的布尔值是否为TrueassertFalse()判断给定的布尔值是否为falseassertNull()判断给定的对象引用是否为nullassertNotNull()判断给定的对象引用是否不为nullassertSame()判断两个对象引用是否指向同一个对象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(“”)
- 动态参数的多参数
完!
版权归原作者 十叶知秋 所有, 如有侵权,请联系我们删除。