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

Maven 测试和单元测试介绍

一、测试介绍

二、单元测试

1)介绍

2)快速入门

添加依赖

<dependencies><!-- junit依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version></dependency>
</dependencies>

UserService

package com.project;
​
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
​
public class UserService {
​/*** 给定一个身份证号, 计算出该用户的年龄* @param idCard 身份证号*/public Integer getAge(String idCard){if (idCard == null || idCard.length() != 18) {throw new IllegalArgumentException("无效的身份证号码");}String birthday = idCard.substring(6, 14);LocalDate parse = LocalDate.parse(birthday, DateTimeFormatter.ofPattern("yyyyMMdd"));return Period.between(parse, LocalDate.now()).getYears();}
​/*** 给定一个身份证号, 计算出该用户的性别* @param idCard 身份证号*/public String getGender(String idCard){if (idCard == null || idCard.length() != 18) {throw new IllegalArgumentException("无效的身份证号码");}return Integer.parseInt(idCard.substring(16,17)) % 2 == 1 ? "男" : "女";}
​
}

UserServiceTest

package com.project;
​
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
​
//测试类
public class UserServiceTest {
​@Testpublic void testGetAge(){UserService userService = new UserService();Integer age = userService.getAge("100000200010011011");System.out.println(age);}
​@Testpublic void testGetName(){UserService userService = new UserService();String gender = userService.getGender("100000200010011011");System.out.println(gender);}// 断言可以判断业务逻辑是否正确@Testpublic void testGenderWithAssert(){UserService userService = new UserService();String gender = userService.getGender("100000200010011011");// 断言Assertions.assertEquals("男", gender,"性别获取有问题");}
​@Testpublic void testGenderWithAssert2(){UserService userService = new UserService();String gender = userService.getGender("100000200010011011");// 断言如果有错误抛出异常Assertions.assertThrows(IllegalArgumentException.class, ()->{userService.getGender("100000200010011011");});}
}

 

3)断言

   

上述方法形参中的最后一个参数 msg ,表示错误提示信息,可以不指定(有对应的重载方法)

4)常见注解

5)单元测试-企业开发规范

1、判断测试方法的覆盖率

2、只判断某个类之中的覆盖率

3、AI生成单元测试

IDea安装通义灵码AI插件

点击标志后,点击单元测试

package com.project;
​
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
​
import static org.junit.jupiter.api.Assertions.*;
​
public class UserServiceAiTest {
​private UserService userService;@BeforeEach // 在每个测试方法执行前执行public void setUp() {userService = new UserService();}
​@Testpublic void getGender_ValidMaleIdCard_ReturnsMale() {String gender = userService.getGender("100000200010011011");assertEquals("男", gender, "性别获取错误,应为男性");}
​@Testpublic void getGender_ValidFemaleIdCard_ReturnsFemale() {String gender = userService.getGender("100000200010011022");assertEquals("女", gender, "性别获取错误,应为女性");}
​@Testpublic void getGender_NullIdCard_ThrowsException() {assertThrows(IllegalArgumentException.class, () -> {userService.getGender(null);}, "无效的身份证号码");}
​@Testpublic void getGender_InvalidLengthIdCard_ThrowsException() {assertThrows(IllegalArgumentException.class, () -> {userService.getGender("10000020001001101");}, "无效的身份证号码");}
​@ParameterizedTest@ValueSource(strings = {"100000200010011011", "100000200010011031", "100000200010011051"})public void getGender_MultipleMaleIdCards_ReturnsMale(String idCard) {String gender = userService.getGender(idCard);assertEquals("男", gender, "性别获取错误,应为男性");}
​@ParameterizedTest@ValueSource(strings = {"100000200010011022", "100000200010011042", "100000200010011062"})public void getGender_MultipleFemaleIdCards_ReturnsFemale(String idCard) {String gender = userService.getGender(idCard);assertEquals("女", gender, "性别获取错误,应为女性");}
}

6)生命周期中的test

所有命名规范的test都会运行

http://www.lryc.cn/news/511775.html

相关文章:

  • Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言
  • UE5 丧尸类杂兵的简单AI
  • Linux字符设备驱动开发的三种方式(分析+对比+示例)
  • C++设计模式之行为型模式概述,它们的目的与特点
  • 把Huggingface下载的arrow数据集转化为json格式
  • 复习打卡大数据篇——Hadoop YARN
  • fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值
  • Linux 基本指令
  • GO语言基础面试题
  • 要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量
  • 小程序基础 —— 10 如何调试小程序代码
  • Vue项目如何设置多个静态文件;如何自定义静态文件目录
  • CentOS Stream 9 安装 JDK
  • 前端(htmlcss)
  • py打包工具
  • 华为OD E卷(100分)39-最长子字符串的长度(二)
  • Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案
  • JSON结构快捷转XML结构API集成指南
  • 【视觉惯性SLAM:四、相机成像模型】
  • 网络编程:TCP和UDP通信基础
  • 声波配网原理及使用python简单的示例
  • 深度学习任务中的 `ulimit` 设置优化指南
  • 【学生管理系统】权限管理
  • Java编程题_面向对象和常用API01_B级
  • JUC并发工具---线程协作
  • Excel for Finance 08 `XNPV`和`XIRR` 函数
  • 嵌入式入门Day35
  • AE/PR/达芬奇模板:自动光标打字机文字标题移动效果动画模板预设
  • RCE漏洞
  • 在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题