前言
小亭子正在努力的学习编程,接下来将开启软件测试的学习~~
分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~
同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~
目录
前言
Junit5简介
什么是Junit5
JUnit5的主要特性
JUnit5的使用
注解
面试题
参数化
1.单参数:传递的是一种数据类型的参数
结果展示
2.多参数
3.CSV获取参数
4.方法获取参数:
断言
断言相等
断言不相等
断言为空
断言不为空
1.指定执行顺序
2.随机顺序执行
测试套件
1.按照指定class运行
2.指定包
添加依赖
Junit5简介
什么是Junit5
JUnit5官网
JUnit 5https://junit.org/junit5/
JUnit5是一种针对Java的单元测试框架
JUnit5= JUnit Platform + JUnit Jupiter + JUnit Vintag
简单介绍下:
Junit Platform:
用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持;
JUnit Jupiter:
包含JUnit新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码;
JUnit Vintage:
用于在JUnit5中兼容运行JUnit3.x和JUnit4.x的测试用例。
JUnit5的主要特性
- 提供全新的断言和测试注解,支持测试类内嵌;
- •更丰富的测试方式:支持动态测试,重复测试,参数化测试等;
- •实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖;
- •提供对 Java 8 +版本的支持,如 Lambda 表达式,Stream API等。
JUnit5的使用
注解
这里介绍几种常用的注解
注解 作用 @Test 表示当前的方法是一个测试用例 @Disable 忽略当前测试用例(ignore效果一样,但是不是junit5的) @BeforeALL 所有的测试用例之前执行 @AfterALL 所有的测试用例执行完之后执行 @BeforeEach 每个测试用例前执行一次 @AfterEach 每个测试用例执行之后执行一次 代码演示
public class JunitTest01 { @Test void test01(){ System.out.println("test01"); } //忽略这个测试用例 @Disabled @Test void test02(){ System.out.println("test02"); } @Test void test03(){ System.out.println("test03"); } //在所有测试用例前执行 @BeforeAll static void before(){ System.out.println("beforeall"); } //在所有测试用例之后执行 @AfterAll static void afterall(){ System.out.println("afterall"); } //在每一个测试用例前执行 @BeforeEach void beforeeach(){ System.out.println("beforeeach"); } //在每一个测试用例之后执行 @AfterEach void aftereach(){ System.out.println("aftereach"); } @Test void test04(){ System.out.println("test04"); } }
执行效果展示
面试题
BeforeEach 和 AfterEach
BeforeEach:表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之前执行;类似于Junit4的@Before 。即在每个单元测试之前执行,如果测试类有n个测试方法,则被执行n次;
AfterEach:
表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之后执行;类似于Junit4的@After 。即在每个单元测试之后执行,如果测试类有n个测试方法,则被执行n次;
参数化
@ParameterizedTest
表示方法是参数化测试,这里我们需要引入对应的依赖,这里和Junit的版本保持一致:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency>
1.单参数:传递的是一种数据类型的参数
@ValueSource
代码实现
//单参数 @ParameterizedTest @ValueSource(ints = {1,2,3}) void Test04(int num){ System.out.println(num); } @ParameterizedTest @ValueSource(strings = {"1","2","3"}) void Test042(String number){ System.out.println(number); }
结果展示
2.多参数
@CsvSource
代码实现
//多参数 @ParameterizedTest @CsvSource({"1,2,3,''"}) void Test02(String x,String y,String z,String q){ System.out.println(x); System.out.println(y); System.out.println(z); System.out.println(q); }
结果展示
注:这里最后一个参数我展示了字符为空的情况
3.CSV获取参数
@CsvFileSource
需要创建.CSV文件【这里可能会出现编码错误,出现乱码,可以根据情况去修改idea或文本的编码设置】
创建方法
代码实现
@ParameterizedTest @CsvFileSource(resources = "test0301.csv") void Test03(int num ,String name){ System.out.println("学号"+ num + "姓名:"); System.out.println(name);
结果展示
4.方法获取参数:
@MethodSource
代码实现
//用方法获取参数 @ParameterizedTest @MethodSource("Generator") void Test07(int num,String name){ System.out.println(num+":" + name); } public static Stream<Arguments> Generator(){ return Stream.of(Arguments.arguments(1,"张三"), Arguments.arguments(2,"李四"), Arguments.arguments(3,"王五") ); }
结果展示
断言
断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;
- 1)assertEquals :判断两个对象或两个原始类型是否相等
- 断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;
- 2)assertNotEquals:判断两个对象或两个原始类型是否不相等
- 3)assertSame:判断两个对象引用是否指向同一个对象
- 4)assertNotNull:判断给定的对象引用是否不为null
断言相等
代码实现
@ParameterizedTest @ValueSource(ints = {1}) void Test01(int num){ System.out.println(num); Assertions.assertEquals(1,num); }
结果展示
断言不相等
代码实现
//断言不相等 @ParameterizedTest @ValueSource(ints = {1}) void Test02(int num){ System.out.println(num); Assertions.assertNotEquals(2,num); }
结果展示
断言为空
代码实现
//断言为空 @ParameterizedTest @ValueSource(ints = {1}) void Test03(int num){ String str = null; System.out.println(num); Assertions.assertNull(str); }
结果展示
断言不为空
代码实现
//不为空 @ParameterizedTest @ValueSource(ints = {1}) void Test05(int num){ String str =" null"; System.out.println(num); Assertions.assertNull(str); }
结果展示
上述测试用例在执行的时候大家会发现不管先写哪个测试用例,最后的执行顺序不变,这是因为juniit有自己默认的执行顺序。那么,我们想指定执行顺序该怎么做呢?
1.指定执行顺序
使用 TestMethodOrder
1.按照指定顺序来执行测试用例 @Order()
代码实现
按照指定顺序来执行测试用例 // 按照指定顺序 //@TestMethodOrder(MethodOrderer.OrderAnnotation.class) // 按照随机顺序 @TestMethodOrder(MethodOrderer.Random.class) public class Junit_Test1 { // 第三个执行 @Order(3) @Test void Test01() { System.out.println("测试用例1"); } // 第一个执行 @Order(1) @Test void Test02() { System.out.println("测试用例2"); } // 第二个执行 @Order(2) @Test void Test03() { System.out.println("测试用例3"); }
效果展示
2.随机顺序执行
测试套件
1)SelectClasses指定通过class运行测试套件时要选择的类
2)SelectPackages指定通过包运行测试套件时要选择的类
先建不同的包来测试
添加依赖
中央仓库地址:
Maven Repository: Search/Browse/Explore (mvnrepository.com)
添加方法:(以junit的为例演示)
1.进入网站,搜索需要的依赖
2.选择版本
3.复制路径
4.粘贴路径
以上就是本文分享的主要内容,对你有帮助的话,可以点个赞哦~~