2025年【软件测试】单元测试工具---Junit详解

【软件测试】单元测试工具---Junit详解1 junit 1 1 junit 是什么 JUnit 是一个 Java 语言的单元测试框架 虽然我们已经学习了 selenium 测试框架 但是有的时候测试用例很多 我们需要一个测试工具来管理这些测试用例 Junit 就是一个很好的管理工具 简单来说 Junit 是一个针对 Java 单元测试的框架 Junit 由 Junit Platform

大家好,我是讯享网,很高兴认识大家。

1.junit

1.1 junit是什么

JUnit是一个Java语言的单元测试框架。

虽然我们已经学习了selenium测试框架,但是有的时候测试用例很多,我们需要一个测试工具来管理这些测试用例,Junit就是一个很好的管理工具,简单来说Junit是一个针对Java单元测试的框架。Junit由Junit Platform _ Junit Jupiter + junit Vintage3部分组成。

1.2 Junit和Selenium的关系

Junit和Selenium是完全不同的两个东西!!!

在一个灯串上,如果说selenium编写的测试用例是一个小灯泡,那么junit就是把它们串起来的线。junit是用来管理selenium的测试用例的。

在这里插入图片描述
讯享网

2.junit技术

2.0 前置工作

在pom.xml文件中添加依赖

引入selenium:

 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.7.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> 

讯享网

参数化:

讯享网 <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.2</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.9.2</version> </dependency> 

测试套件:

 <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite</artifactId> <version>1.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency> 

2.1 junit常用注解

@Test

@Test表示当前的方法是一个测试用例

使用:

举例:

讯享网 //表示当前的方法是一个测试用例 @Test void Test01(){ 
    // 创建了一个options对象,用来给请求设置一些参数 ChromeOptions options = new ChromeOptions(); // 允许所有的请求 options.addArguments("--remote-allow-origins=*"); //设置驱动路径 System.setProperty("webdriver.chrome.driver","C:\\Program Files\\Java\\jdk1.8.0_192\\bin\\chromedriver.exe"); // 创建了一个驱动 WebDriver webDriver = new ChromeDriver(options); //打开百度 webDriver.get("https://www.baidu.com/"); } 

@BeforeAll 和 @AfterAll

这两个注解在整个测试的时候会执行一次。

@BeforeAll表示在当前类所有测试用例执行之前运行 @AfterAll表示在当前类所有测试用例执行之后运行 并且这两个方法都有static修饰,都只执行一次 

使用:

举例:

讯享网 //当前类里面所有的测试用例执行之前执行这个方法 @BeforeAll static void SetUp(){ 
    System.out.println("开始执行@BeforeAll修饰的方法"); } 

使用:

举例:

 //当前类里面所有的测试用例执行之后执行这个方法 @AfterAll static void TearDown(){ 
    System.out.println("开始执行@AfterAll对应的方法"); } 

运行结果:
在这里插入图片描述

@BeforeEach 和 @AfterEach

这两个注解会在每一个测试用例执行的时候都执行一次。

  • @BeforeEach表示在每个测试方法执行前运行
  • @AfterEach表示在每个测试方法执行后运行

举例:

讯享网 @BeforeEach void BeforeTest(){ 
    System.out.println("这是一个@BeforeEach注解"); } @AfterEach void AfterTest(){ 
    System.out.println("这是一个@AfterEach注解"); } 

结果:
在这里插入图片描述

@Disabled

作用:忽略当前的测试用例

举例:

 //忽略当前的测试用例 @Disabled //表示当前的方法是一个测试用例 @Test void Test01(){ 
    // 创建了一个options对象,用来给请求设置一些参数 ChromeOptions options = new ChromeOptions(); // 允许所有的请求 options.addArguments("--remote-allow-origins=*"); //设置驱动路径 System.setProperty("webdriver.chrome.driver","C:\\Program Files\\Java\\jdk1.8.0_192\\bin\\chromedriver.exe"); // 创建了一个驱动 WebDriver webDriver = new ChromeDriver(options); //打开百度 webDriver.get("https://www.baidu.com/"); } 

结果:并没有执行这个测试用例

在这里插入图片描述

2.2 junit测试用例执行顺序

有人觉得junit的测试顺序是从上到下的,是这样吗?

先来看一个示例:

讯享网 @Test void Test06(){ 
    System.out.println("这是测试用例5"); } @Test void Test05(){ 
    System.out.println("这是测试用例4"); } @Test void Test04(){ 
    System.out.println("这是测试用例3"); } @Test void Test02(){ 
    System.out.println("这是测试用例1"); } @Test void Test03(){ 
    System.out.println("这是测试用例2"); } 

结果:

在这里插入图片描述

以上结果表明了它不是按照从上到下执行的测试用例。

指定顺序执行

使用@TestMethodOrder(MethodOrderer.OrderAnnotation.class)+ @Order(数字)注解顺序执行测试用例。

举例:

//按照指定顺序执行测试用例 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class JunitTest { 
    @Order(1) @Test void Test06(){ 
    System.out.println("这是测试用例5"); } @Order(2) @Test void Test05(){ 
    System.out.println("这是测试用例4"); } @Order(3) @Test void Test04(){ 
    System.out.println("这是测试用例3"); } @Order(4) @Test void Test02(){ 
    System.out.println("这是测试用例1"); } @Order(5) @Test void Test03(){ 
    System.out.println("这是测试用例2"); } } 

结果:
在这里插入图片描述
是按照order里面的顺序执行的。

随机执行

使用@TestMethodOrder(MethodOrderer.Random.class)随机执行测试用例。

举例:

讯享网//按照随机顺序执行测试用例 @TestMethodOrder(MethodOrderer.Random.class) public class JunitTest { 
    @Order(1) @Test void Test06(){ 
    System.out.println("这是测试用例5"); } @Order(2) @Test void Test05(){ 
    System.out.println("这是测试用例4"); } @Order(3) @Test void Test04(){ 
    System.out.println("这是测试用例3"); } @Order(4) @Test void Test02(){ 
    System.out.println("这是测试用例1"); } @Order(5) @Test void Test03(){ 
    System.out.println("这是测试用例2"); } } 

2.3 参数化测试

测试方法一般需要传参数。

单参数

使用 @ParameterizedTest + @ValueSource() 配合传递单参数

@ParameterizedTest : 注册参数

!!!注意:这两个注解不能和@Test一起使用,并且只能传一种类型的参数

示例:

 @ParameterizedTest //注册 @ValueSource(strings = { 
   "1","2","3"}) void Test07(String str){ 
    System.out.println(str); } 

结果:
在这里插入图片描述

多参数

上面只可以传入一种类型的参数,所以如果我们需要传入多种类型的参数,就可以使用csv 。

CSV

①直接传参数:使用@ParameterizedTest + @CsvSource()配合

举例:

讯享网 @ParameterizedTest @CsvSource({ 
   "1,2","3,4"}) void Test08(String str,int num){ 
    System.out.println(str+" "+num); } 

结果:
在这里插入图片描述

②传递文件:使用@ParameterizedTest+ @CsvFileSource(resources = "文件名.csv")配合

!!!注意:文件必须是.csv类型

示例:

 @ParameterizedTest @CsvFileSource(resources = "test01.csv") void Test09(int id,String name){ 
    System.out.println("id="+id+",name="+name); } 

test01.csv文件内容:

讯享网1,温温 2,苏苏 3,怜怜 

结果:
在这里插入图片描述

方法传参

使用@ParameterizedTest + @MethodSource("方法名") 传入一个方法

示例:

 @ParameterizedTest //注册参数 @MethodSource("Generator") //注册的参数是什么 void Test10(String num,String name){ 
    System.out.println(num+" "+name); } 

Generator方法代码:

讯享网 public static Stream<Arguments> Generator() { 
    return Stream.of(Arguments.arguments("1,温温","2,苏苏")); } 

结果:
在这里插入图片描述

2.4 断言

在软件测试中,断言(Assertion)是一种用于检查程序或系统在执行某些操作或运行某些代码后是否符合预期行为的技术手段。在测试中,断言通常用于验证代码的正确性,确保代码在满足特定条件时会产生预期的结果。

示例:

 @ParameterizedTest @ValueSource(ints = { 
   10}) void Test11(int num){ 
    //断言相等 Assertions.assertEquals(num,10); //断言不相等 Assertions.assertNotEquals(num,11); } 
讯享网 @ParameterizedTest @ValueSource(strings = { 
   "1"}) void Test11(int num){ 
    //断言为空 Assertions.assertNull(num); //断言不为空 Assertions.assertNotNull(num); } 

2.5 测试套件

测试套件(test suite)有时也称为验证套件(validation suite),是许多测试用例的集合,测试用例可用来测试一程式是否正确工作,测试套件包括许多测试用例,一般也会有针对测试用例及其测试目的的详细说明,在进行测试时的系统组态资讯以及测试前需进行的步骤。

通过测试套件,将服务于同一个测试目的或同一运行环境下的一系列测试用例有机的组合起来。测试套件是按照测试计划所定义的各个阶段的测试目标决定的,即先有测试计划,后面才有测试套件。

例如:此时有三个类的测试用例都需要测试。
在这里插入图片描述

通过测试套件全部测试:

方法①:在括号中写入测试类

@Suite @SelectClasses({ 
   JunitTest.class, JunitTest02.class}) public class RunSuite { 
    } 

方法②:根据指定的包来运行多个测试用例

讯享网@Suite @SelectPackages({ 
   "org.example.junit01","org.example.junit"}) public class RunSuit { 
    } 
小讯
上一篇 2025-01-16 20:11
下一篇 2025-02-05 19:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/129197.html