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

junit单元测试

 单元测试

单元测试

用main方法测试,如果一个方法报错,其他全部都不能进行测试了

引用junit

主程序代码

package com.itheima;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 ? "男" : "女";}}

测试代码

package com.itheima;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;/*** 测试类*/
@DisplayName("用户信息测试类")
public class UserServiceTest {/*@BeforeAll //在所有的单元测试方法运行之前, 运行一次public static void beforeAll(){System.out.println("before All");}@AfterAll //在所有的单元测试方法运行之后, 运行一次public static void afterAll(){System.out.println("after All");}@BeforeEach //在每一个单元测试方法运行之前, 都会运行一次public void beforeEach(){System.out.println("before Each");}@AfterEach //在每一个单元测试方法运行之后, 都会运行一次public void afterEach(){System.out.println("after Each");}*/@Testpublic void testGetAge(){UserService userService = new UserService();Integer age = userService.getAge("100000200010011011");System.out.println(age);}@Testpublic void testGetGender(){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);Assertions.assertEquals("男", gender, "性别获取错误有问题");}/*** 断言*/@Testpublic void testGenderWithAssert2(){UserService userService = new UserService();//断言Assertions.assertThrows(IllegalArgumentException.class, () -> {userService.getGender(null);});}/*** 参数化测试*/@DisplayName("测试用户性别")@ParameterizedTest@ValueSource(strings = {"100000200010011011","100000200010011031","100000200010011051"})public void testGetGender2(String idCard){UserService userService = new UserService();String gender = userService.getGender(idCard);//断言Assertions.assertEquals("男", gender);}
}

规定必须执行,规范不是

身份证倒数第二位为奇数:男性  偶数:女性

注意:并不是说运行到是绿色就说明代码没错。想要判断逻辑有没有错误需要用到断言

断言

用了断言后,运行是绿色才说明是正确的代码

    /*** 断言*/@Testpublic void testGenderWithAssert(){UserService userService = new UserService();String gender = userService.getGender("100000200010011011");//断言//Assertions.assertEquals("男", gender);Assertions.assertEquals("男", gender, "性别获取错误有问题");}

加上msg提示信息前后区别

        //断言//Assertions.assertThrows(你期望抛出的异常类型.class,() ->{//   类名.方法名(你抛出的异常结果)// })

常见注解

参数化注解:只定义一个测试方法就可以完成一批数据的测试

    /*** 参数化测试*/@DisplayName("测试用户性别")@ParameterizedTest@ValueSource(strings = {"100000200010011011","100000200010011031","100000200010011051"})public void testGetGender2(String idCard){UserService userService = new UserService();String gender = userService.getGender(idCard);//断言Assertions.assertEquals("男", gender);}

junit企业开发规范

通过覆盖率,可以知道自己考虑的测试情况到底全面不全面

点击左边的红绿条可以从hits知道单元命中率次数(即你针对这个单元方法测试的次数)

想要只统计某个测试类的覆盖率而不是某个包的覆盖率

搜索你想统计的测试类名——ok——apply——ok

借助ai使用junit

http://www.dtcms.com/a/204665.html

相关文章:

  • RT_Thread——内存管理
  • 融云 uni-app IMKit 上线,1 天集成,多端畅行
  • 什么是国密、密评、商密
  • 离线服务器算法部署环境配置
  • sqlsugar查看表结构并导出word文档
  • 深入理解用于中断控制的 NVIC 寄存器
  • STM32之串口通信WIFI上云
  • PyTorch中cdist和sum函数使用详解
  • 25、工业防火墙 - 工控网络保护 (模拟) - /安全与维护组件/industrial-firewall-dcs-protection
  • 免费的DDOS防护对网站业务有用吗?
  • PEFT库PromptTuningConfig 配置
  • Google I/O 2025:Gemini 2.5 Pro、Project Astra 与 AI Ultra 全面解析
  • Gartner研究报告《Generative AI 赋能Digital Commerce的三种路径》学习心得
  • Python人工智能算法 模拟退火算法:原理、实现与应用
  • 阿里云合集(不定期更新)
  • 【Vue篇】重剑无锋:面经PC项目工程化实战面经全解
  • RuntimeError: Cannot find sufficient samples, consider increasing dataset size.
  • Linux上运行程序加载动态库失败
  • 【完整版】基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎
  • GO语言学习(七)
  • 港股IPO市场火爆 没有港卡如何参与港股打新?
  • 以太坊ETH创建代币完整教程
  • 【钱包协议】:WalletConnect 详解
  • 工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比
  • Oracle审计用户登录信息
  • 【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)
  • Parasoft为可口可乐赋能: 强化软件开发与质量保证
  • 二进制编码、定点数与浮点数
  • 左手腾讯CodeBuddy 、华为通义灵码,右手微软Copilot,旁边还有个Cursor,程序员幸福指数越来越高了
  • 力扣-两数之和