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

网页后端开发(基础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,测试程序范围有效。

相关文章:

  • 卷积神经网络中的通道注意力机制
  • Vue 3.5.13 中 `defineModel` 的局限性及解决方案
  • SpringAI+DeepSeek大模型应用开发——6基于MongDB持久化对话
  • 使用 MCP 驱动的分布式智能扩展 Space-O-RAN
  • sql解析,日期 trunc sysdate
  • Leetcode 刷题记录 12 —— 二叉树第三弹
  • 第19篇:数据库中间件中的 SQL 分析与审计机制设计
  • MCP案例 - 数据可视化工具服务器
  • 包含15个APP客户端UI界面的psd适用于餐厅咖啡店面包店快餐店
  • PyTorch数据分割全流程指南:从MNIST数据集到模型训练
  • 批量下载图片小工具
  • linux多线程之可重入函数
  • 面经的疑难杂症
  • Proteus8.17仿真51单片机驱动ST7920 LCD12864
  • vue2中setTimeout中调用methods方法问题
  • 基于51单片机的智能小车:按键调速、障碍跟踪、红外循迹与数码管显示(一个合格的单片机课设)
  • Elasticsearch9 + 通义大模型实现语义检索操作详解
  • Qt3d中的材质--PBR材质
  • Android 修改了页面的xml布局,使用了databinding,这时候编译时需要用到apt吗
  • chapter06-针对分类的微调
  • 网站建设策目标/公关公司排行榜
  • 网站的js效果代码大全/seo接单平台
  • 苏州建站网站模板/关键词工具有哪些
  • 网站怎么做微博认证/建网站
  • 网站开发建设费用包括那些/拼多多女装关键词排名
  • 如何做网课网站/搜索引擎外部优化有哪些渠道