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

AI+JavaWeb(二) Maven+单元测试

Maven

Maven是一款用于管理和构建Java项目的工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,是Apache旗下的一个开源项目。
image

作用

1.依赖管理

方便快捷的管理项目依赖的资源(jar包)。
image

仓库

用于存储资源,管理各种jar包
本地仓库:自己计算机上的一个目录。
中央仓库:有Maven团队维护的全球唯一的。
远程仓库(私服):一般有公司团队搭建的私有仓库。

2.项目构建

标准化的跨平台(Linux、Windows、macOS)的自动化项目构建方式。
image

3.统一的项目结构

提供标准、统一的项目结构。
image

配置安装

image

idea配置Maven环境

image
image
image

idea创建Maven项目

image

idea导入Maven项目

方式一

image

方式二

image

坐标

Maven中坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置。
使用坐标来定义项目引入项目中需要的依赖

主要组成

  • groupId:定义当前项目隶属组织名称(通常是域名反写)
  • artifactId:定义当前项目名称(通常是模块名称,例如order-service、goods-service)
  • version:定义当前项目版本号
    • SNAPSHOT:快照版本,功能不稳定、尚处于开发中的版本
    • RELEASE:发行版本,功能趋于稳定、当前更新停止

依赖配置

image
注意:如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索。

传递依赖与排除依赖

一个依赖包往往还会依赖其它依赖包,称此现象为传递依赖。当你引入 A 依赖时,A 依赖的 B、C 依赖会自动被引入到你的项目中。但问题来了:

  1. 传递来的依赖可能和你项目中其他依赖版本冲突(比如两个依赖都引入了不同版本的 commons-logging);
  2. 传递来的依赖是你不需要的(比如你想用 slf4j 替代 commons-logging);
  3. 传递来的依赖可能有安全漏洞,需要排除并手动引入安全版本。
    这时候,排除依赖就派上用场了 —— 它能精准移除传递链中你不想要的那个依赖。
    在你引入的依赖里,通过 <exclusions> 标签排除指定的传递依赖,被排除的资源无需指定版本
<!-- 引入 mybatis-spring,排除它传递的 spring-jdbc -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></exclusion></exclusions>
</dependency><!-- 手动引入统一版本的 spring-jdbc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.20</version>
</dependency>

依赖范围

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

生命周期

Maven的生命周期就是为了对所有的Maven项目构建过程进行抽象和统一。
Maven有3套相互独立的生命周期:

  • clean:清理工作
  • default:核心工作,如:编译、测试、打包、安装、部署等。
  • site:生成报告、发布站点等。
    image
    clean:移除上一次构建生成的文件
    compile:编译项目源代码
    test:使用合适的单元测试框架运行测试(Junit)
    package:将编译后的文件打包,如:jar、war等
    install:安装项目到本地仓库
    注意:在同一套生命周期(clean、default、site)中,当运行后面的阶段时,前面的阶段都会运行。

常见问题及解决方案

image

单元测试

单元测试就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试。

软件测试的四大阶段

image

软件测试的三大方法

image
image

JUnit

最流行的Java测试框架之一,提供了一些方法,方便程序进行单元测试。
image

案例:对userService中业务方法进行单元测试

  1. 在pom.xml中,引入JUnit的依赖
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version>
</dependency>
  1. 在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解
package com.zjq;import org.junit.jupiter.api.Test;class UserServiceTest {@Testpublic void testGetAge(){UserService service = new UserService();Integer age = service.getAge("100101200204050000");System.out.println(age);}
}
  1. 运行单元测试(通过:绿色,失败:红色)
    注意:
  2. Junit单元测试类的命名规范为:XXXTest,Junit单元测试的方法,必须声明为public void

断言

单元测试通过只能说明程序编译正确,不能说明逻辑的正确性,需要借助断言进行测试。
image
案例:测试获取年龄和性别的方法在逻辑上是否正确

package com.zjq;import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;class UserServiceTest {@Testpublic void testGetAge(){UserService service = new UserService();Integer age = service.getAge("100101200204050000");Assertions.assertEquals(23,age,"年龄计算有问题");}@Testpublic void testGenderWithAssert1(){UserService service = new UserService();String gender = service.getGender("100101200204050000");Assertions.assertEquals("女", gender,"性别获取有问题");}@Testpublic void testGenderWithAssert2(){UserService service = new UserService();Assertions.assertThrows(IllegalArgumentException.class,()->{String gender = service.getGender(null);});}
}

注解

image
示例代码

@DisplayName("测试根据身份证获取用户信息")
class UserServiceTest {@BeforeAllpublic static void beforeAllTest(){System.out.println("即将开始测试全部方法");}@BeforeEachpublic void beforeEachTest(){System.out.println("即将开始测试一个方法");}@AfterAllpublic static void AfterAllTest(){System.out.println("全部方法测试完毕");}@AfterEachpublic void AfterEachTest(){System.out.println("一个方法测试完毕");}@DisplayName("测试获取用户性别")@ParameterizedTest@ValueSource(strings = {"100101200204050010","100101200204050010","100101197903290010"})public void TestGetGenders(String idCard){UserService service = new UserService();String gender = service.getGender(idCard);Assertions.assertEquals("男",gender,"性别获取方法有误");}}

企业开发规范

原则:编写测试方法时,要尽可能的覆盖业务方法中所有可能的情况(尤其是边界值

单元测试覆盖率

image

AI生成测试代码

idea安装通义灵码或copolit插件

http://www.jsqmd.com/news/453133/

相关文章:

  • 基于模拟退火算法(SA)求解多车场车辆路径问题(MDVRP)的MATLAB实现
  • 2026年紧致提拉抗衰产品推荐:美人媄在定义“面部精雕”? - 深度智识库
  • 2026卫浴品牌排名情况,集祥陶瓷在性价比方面表现如何 - myqiye
  • 287_尚硅谷_反射的注意事项和细节(1)
  • 上海生产线外包哪家强?TOP5 优质服务商排名盘点 - 包罗万闻
  • 2026年评价高的移动式升降车厂家推荐:电驱动升降车/高空作业升降车推荐厂家 - 行业平台推荐
  • 【工具推荐】Office办公软件下载:2026最新Word/Excel/PPT获取全攻略 - sdfsafafa
  • Windows 系统 JDK1.8 + Tomcat 安装与配置教程
  • 【工具推荐】KMPlayer下载:支持4K/8K解码的万能格式播放器 - sdfsafafa
  • 聊聊2026年全国耐磨缝纫线定制生产,哪家性价比高 - 工业推荐榜
  • 不与他人争光芒,只与自己共成长
  • 自动化框架 - 核心模块使用指南 - Playwright
  • IT人备考心得分享
  • 全屋定制/门窗/家具采购季:2026年广东家装节去哪看?第五十三届深圳家装节 - 深度智识库
  • [Python] 关于使用python去访问Doris的问题
  • 2026年热门的电驱动升降车工厂推荐:高空作业升降车实力工厂推荐 - 行业平台推荐
  • 2026 B2B销售管理工具横评:6款核心能力深度对比 - 毛毛鱼的夏天
  • 自动化框架 - 核心功能使用指南 - 用例过滤Tag使用
  • 细聊雅卓宁波机床展有实力吗,2026年机床展性价比之选大盘点 - 工业设备
  • 2026年广东门窗家具全屋定制去哪看?深圳家装节一站式搞定 - 深度智识库
  • 自动化框架 - 核心模块使用指南 - API
  • 北京记录者商行深耕老物件回收 让城市记忆与闲置价值双向焕新 - 品牌排行榜单
  • 2026年评价高的垃圾桶工厂推荐:室外垃圾桶/环卫垃圾桶/室内垃圾桶精选厂家 - 行业平台推荐
  • 3D打印服务怎么挑?全国5家主流服务商深度对比与排行 - 深度智识库
  • 2026年质量好的景区垃圾桶厂家推荐:环卫垃圾桶精选公司 - 行业平台推荐
  • 必修2.1 种群及动态
  • 说说有名的财税合规企业排名,华光讯在重庆等地区表现咋样 - 工业品牌热点
  • 2026年五大主流CRM系统深度测评:为不同规模与行业企业提供精准选型参考 - 毛毛鱼的夏天
  • 2026年AI优化公司费用多少,蓝戈链企性价比高值得选 - mypinpai
  • 2026 年 3 月深圳 GEO 优化企业 TOP5:技术实力领跑,大湾区营销增长实战指南 - 速递信息