JavaWeb后端-Maven、单元测试
简介
Maven是一款用于管理构建Java项目的工具
Maven作用
- 依赖管理:方便地管理项目依赖的资源(jar包)
- 项目构建:标准跨平台的项目构建方式
- 同一项目结构
Maven核心
Maven坐标
Maven中的坐标是资源(jar)的唯一标识,通过该坐标可唯一定位资源位置
使用坐标定义项目或引入项目中需要的依赖
主要组成:
- groupId:定义当前Maven项目隶属组织的名称(通常域名反写)
- artifactId:定义当前Maven项目名称
- version:定义当前项目版本号
SNAPSHOT:功能不稳定,尚处于开发版本,快照版本
RELEASE:功能趋于稳定,当前停止更新,可用于发行
依赖配置
1、在pom.xml中编写< dependencies>标签
2、在< dependencies>标签中使用< dependency>引入坐标
3、定义坐标的groupId、artifactId、version
4、点击刷新按钮引入最新加入的坐标
<!-- 配置依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.4</version></dependency></dependencies>
排除依赖
<!-- 配置依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.4</version><!-- 排除依赖--><exclusions><exclusion><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId></exclusion></exclusions></dependency></dependencies>
生命周期
Maven中有三套相互独立的生命周期
- clean:清理工作
- default:核心工作,如编译、测试、打包、安装、部署
- site:生成报告、发布站点等
注意
同一套生命周期中,运行后面的阶段时,前面的阶段都会运行
单元测试
单元测试:针对最小的功能单元(方法),编写测试代码对齐正确性进行测试
- 阶段划分
- 测试方法:白盒测试、黑盒测试、灰盒测试
单元测试相关知识链接
断言
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"));LocalDate now = LocalDate.now();return now.getYear() - parse.getYear();}/*** 给定一个身份证号,计算该用户的性别* @param idCard*/public String getGender(String idCard) {if(idCard == null|| idCard.length() != 18){throw new IllegalArgumentException("请输入正确的身份证号");}String gender = idCard.substring(16,17);if(Integer.parseInt(gender) % 2 == 0){return "女";}return "男";}
}
/*** 测试类*/
public class UserServiceTest {@Testpublic void testGetAge(){UserService userService = new UserService();Integer age = userService.getAge("42010119991001001X");System.out.println(age);}@Testpublic void testGetGender(){UserService userService = new UserService();String gender = userService.getGender("42010119991001001X");System.out.println(gender);}/*** 断言*/@Testpublic void testGetAgewithAssert(){UserService userService = new UserService();Integer age = userService.getAge("42010119991001001X");Assertions.assertEquals(26, age,"年龄计算逻辑有误");}@Testpublic void testGetAgewithAssert2(){UserService userService = new UserService();Assertions.assertThrows(IllegalArgumentException.class,()->{userService.getAge(null);});}
}
常见注解
注解相关知识链接
/*** 测试类*/
@DisplayName("用户服务测试类")
public class UserServiceTest {@Testpublic void testGetAge(){UserService userService = new UserService();Integer age = userService.getAge("42010119991001001X");System.out.println(age);}@Testpublic void testGetGender(){UserService userService = new UserService();String gender = userService.getGender("42010119991001001X");System.out.println(gender);}/*** 断言*/@Testpublic void testGetAgewithAssert(){UserService userService = new UserService();Integer age = userService.getAge("42010119991001001X");Assertions.assertEquals(26, age,"年龄计算逻辑有误");}@Testpublic void testGetAgewithAssert2(){UserService userService = new UserService();Assertions.assertThrows(IllegalArgumentException.class,()->{userService.getAge(null);});}/*** 参数化测试*/@DisplayName("测试用户性别")@ParameterizedTest@ValueSource(strings = {"42010119991001001X","42010119991009501X"})public void testGetGenderwithParam(String idCard){UserService userService = new UserService();String age = userService.getGender(idCard);Assertions.assertEquals("男", age,"性别计算逻辑有误");}@BeforeAll//所有单元测试方法前运行一次public static void beforeAll(){System.out.println("测试开始");}@AfterAll//所有单元测试方法后运行一次public static void afterAll(){System.out.println("测试结束");}@BeforeEach//每个单元测试方法前运行一次public void beforeEach(){System.out.println("开始测试");}@AfterEach// 每个单元测试方法后运行一次public void afterEach(){System.out.println("结束测试");}
}
Maven依赖范围
依赖的jar包,默认情况下可在任何地方使用,可通过< scope>…< /scope>设置作用范围
作用范围:
<!--junit依赖--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.10.0</version><scope>test</scope></dependency>