当前位置: 首页 > ai >正文

网页后端开发(基础2--maven单元测试)

测试

测试:是一种用来促进鉴定软件的正确性,完整性,安全性和质量的过程。

测试的阶段:

单元测试,集成测试,系统测试,验收测试。

单元测试:对软件的基本组成单位进行测试,是最小的测试单位。

                目的:检验软件的基本组成单位的正确性

                测试人员:开发人员

                测试的方法:白盒测试

集成测试:将已通过单元测试的单元,按设计要求组合成系统或子系统,在进行测试。

                目的:检查单元之间的协作是否正确。

                测试人员:开发人员

                测试的方法:灰盒测试

系统测试:对集成好的软件系统进行彻底的测试。

                目的:验证软件系统的正确性,性能是否满足指定的要求

                测试人员:测试人员

                测试的方法:黑盒测试

验收测试:交付测试,针对用户需求,对业务流程进行正式的测试。

                目的:验证软件系统是否满足验收的标准

                测试人员:客户/需求方

                测试的方法:黑盒测试

测试的方法:白盒测试,黑盒测试,灰盒测试

白盒测试:清楚软件内部结构,代码逻辑。用于验证代码,逻辑的正确性。

黑盒测试:不清楚软件内部结构,代码逻辑。用于验证软件的功能,兼容性等方面。

灰盒测试:结合了白盒测试和黑盒测试的特点,既关注软件的内部结构又考虑外部表现。

入门

main方法测试:

1.测试代码与源码不分离,难以维护。

2.一个方法测试失败,影响后面方法。

3.无法自动化测试,得到测试报告。

单元测试:针对最小的功能单元,编写测试代码对其正确性进行测试。

JUnit:最流行的Java测试框架之一,提供一些固定功能,方便程序进行单元测试

JUnit方法测试:

1.测试代码与源码分离,利于维护。

2.一个方法测试失败,不影响后面方法。

3.可根据需要进行自动化测试。

4.可自动分析测试结果,产出测试报告。

JUnit使用方法

1.在pom.xml中,引入Junit依赖。

<!--junit依赖--><!-- JUnit Jupiter API --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.1</version><scope>test</scope></dependency><!-- JUnit Jupiter Engine --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.8.1</version><scope>test</scope></dependency><!-- JUnit Platform Launcher --><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-launcher</artifactId><version>1.8.1</version><scope>test</scope></dependency><!-- JUnit Jupiter Params --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.8.1</version><scope>test</scope></dependency>

2.在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。

注:JUnit单元测试类名命名规范为:XxxxxTest。

JUnit单元测试方法,必须声明为public void xxx{}。

 

注:运行测试单元,测试通过为:绿色,测试失败为:红色。 

断言

        JUnit提供一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式被称为断言

Assertions.assertEquals(object exp,Object act)检查两个值是否相等,不相等就报错。
Assertions.assertNotEquals(object unexp,Object act)检查两个值是否不相等,相等就报错
Assertions.assertNuli(object act)检查对象是否为null,不为null,就报错。
Assertions.assertNotNul(object act)检查对象是否不为null,为null,就报错。
Assertions.assertTrue(boolean condition)检查条件是否为true,不为true,就报错
Assertions.assertFalse(boolean condition)检查条件是否为false,不为false,就报错。
Assertions.assertThrows(class expType,Executable exec)检查两个对象引用是否相等,不相等,就报错。

package com.itheima;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest; // 添加此行导入
import org.junit.jupiter.params.provider.ValueSource;public class UserServiceTest {//UserService 计算年龄@Testpublic void testGetAge() {UserService userService = new UserService();Integer age = userService.getAge("610125190511117117");System.out.println(age);}//计算性别@Testpublic void testGetGender() {UserService userService = new UserService();String gender = userService.getGender("610125190511117117");System.out.println(gender);}//断言@Testpublic void testGenderWithAssert() {System.out.println("断言gender是男");UserService userService = new UserService();String gender = userService.getGender("610125190511117117");Assertions.assertEquals("男",gender);}//断言@Testpublic void testGenderWithAssert2() {System.out.println("断言gender类型");UserService userService = new UserService();Assertions.assertThrows(IllegalArgumentException.class,()->{//期望异常userService.getGender(null);//实际异常});}
}

运行结果 :

总结:

在JUnit单元测试中,断言的作用:
    单元测试方法运行不报错,不代表业务方法没问题。
    通过断言可以检测方法运行结果是否和预期一致,从而判断业务方法的正确性

    使用方法:Assertions.assert****()

常见注解

常见注解:

@Test测试类中的方法用它修饰才能成为测试方法,才能启动执行
@ParmeterizedTest 参数化测试的注解(可以让单个测试运行多次,每次运行时仅参数不同)用了该注解,就不需要@Test注解了

@DValueSource参数化测试的参数来源,赋予测试方法参数 ,与参数化测试注解配合使用
@DisplayName 指定测试类、测试方法显示的名称 (默认为类名、方法名)


@BeforeEach用来修饰一个实例方法,该方法会在每一个测试方法执行之执行一次,初始化资源(准备工作)
@AfterEach用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次,释放资源(清理工作)
@BeforeAll用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次,初始化资源(准备工作)
@AfterAll用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次,释放资源(清理工作)

注:
1.JUnit单元测试的方法,是否可以声明方法形参?        

        可以的,参数化测试
        @ParameterizedTest + @ValueSource
2。如何实现在单元测试方法运行之前,做一些初始化操作

        @BeforeEach、@BeforeAll
3,如何实现在单元测试方法运行之后,释放对应的资源?

        @AfterEach、@AfterAll

参数化测试:@ParmeterizedTest

依赖范围<scope>....</scope> 

在maven项目中,test目录存放单元测试的代码,是否可以在main目录中编写单元测试呢?
可以,但是不规范

依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope>..</scope>设置其作用范围

作用范围:

主程序范围有效。(main文件夹范围内)

测试程序范围有效。(test文件夹范围内)

是否参与打包运行。(package指令范围内)

<!--junit依赖--><!-- JUnit Jupiter API --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.1</version><scope>test</scope></dependency>

<scope>test</scope> 

scope的值为test,测试程序范围有效。

http://www.xdnf.cn/news/14276.html

相关文章:

  • useMemo vs useCallback:React 性能优化的两大利器
  • 如何通过 noindex 阻止网页被搜索引擎编入索引?
  • 哈希函数结构:从MD到海绵的进化之路
  • AudioLab安卓版:音频处理,一应俱全
  • Redis中的zset的底层实现
  • SeaTunnel与Hive集成
  • Chapter12-API testing
  • 极客时间《后端存储实战课》阅读笔记
  • 快速使用 Flutter 中的 SnackBar 和 Toast
  • Vue-Leaflet地图组件开发(四)高级功能与深度优化探索
  • 【JAVA】48. Semaphore信号量控制资源并发访问
  • Python函数基础知识(2/3)
  • 电阻篇---下拉电阻
  • 3_STM32开发板使用(STM32F103ZET6)
  • Spring Boot诞生背景:从Spring的困境到设计破局
  • MAZANOKE:一款隐私优先的浏览器图像优化工具及Docker部署指南
  • 基于AWS无服务器架构的区块链API集成:零基础设施运维实践
  • Java面试题:分布式ID时钟回拨怎么处理?序列号耗尽了怎么办?
  • VINS-Fusion 简介、安装、编译、数据集/相机实测
  • 传统数据仓库正在被 Agentic AI 吞噬
  • 超高速总线CDCTL01A 芯片在机器人领域的应用解析
  • SLB、Nginx、Gateway 与 ECS 的关系详解
  • Node.js 中的 Token 认证机制详解
  • 【Docker 05】Container - 容器
  • volatile 对 int 和 long 修改的区别
  • 如何制定适用于多项目的统一流程规范
  • 关于AUTOSAR AP 开发流程的研究
  • (83)课102:过程里的条件判断 IF 条件1 THEN .. ELSEIF 条件2 THEN .. ELSE .. END IF;
  • # 把 ISO 写入 U 盘(相关了解)
  • VBA使用字典统计