JavaWebDAY3
Maven
Maven就是一款管理和构建java项目的工具。
maven项目的目录结构中,main目录下存放的是项目的源代码,test目录下存放的是项目的测试代码。而无论是在main还是在test下,都有两个目录,一个是java,用来存放源代码文件;另一个是resources,用来存放配置文件。
Maven的作用 :
- 方便的依赖管理
- 统一的项目结构
- 标准的项目构建流程
写61b的时候用过,当时不知道啥原理,现在明白了 maven就是拿来管理jar包和规范项目结构的 ![[Pasted image 20241222164101.png]]
pom文件
<project>:pom文件的根标签,表示当前maven项目<modelVersion>:声明项目描述遵循哪一个POM模型版本坐标 :
<groupId><artifactId><version>定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
<maven.compiler.source>:编译JDK的版本<maven.compiler.target>:运行JDK的版本<project.build.sourceEncoding>: 设置项目的字符集
导入maven
- 方式一:
File->Project Structure->Modules->Import Module->选择maven项目的pom.xml。 ![[Pasted image 20241222164751.png]] - 方式二:
Maven面板->+(Add Maven Projects)->选择maven项目的pom.xml。 ![[Pasted image 20241222164813.png]]
依赖配置
依赖传递
所谓maven的依赖传递,指的就是如果在maven项目中,A 依赖了B,B依赖了C,C依赖了D,那么在A项目中,也会有C、D依赖,因为依赖会传递。
排除依赖
生命周期
Maven的生命周期就是为了对所有的构建过程进行抽象和统一。描述了一次项目构建,经历哪些阶段。 Maven对项目构建的生命周期划分为3套(相互独立):

- clean:清理工作。 - default:核心工作。如:编译、测试、打包、安装、部署等。 - site:生成报告、发布站点等。 三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图:

主要关注以下几个: - clean:移除上一次构建生成的文件 - compile:编译项目源代码 - test:使用合适的单元测试框架运行测试(junit) - package:将编译后的文件打包,如:jar、war等 - install:安装项目到本地仓库
执行
在日常开发中,当我们要执行指定的生命周期时,有两种执行方式: 1. 在idea工具右侧的maven工具栏中,选择对应的生命周期,双击执行 2. 在DOS命令行中,通过maven命令执行 方式一:在idea中执行生命周期 - 选择对应的生命周期,双击执行

其他的生命周期都是类似的道理,双击运行即可。 方式二:在命令行中执行生命周期 1. 打开maven项目对应的磁盘目录

2. 在当前目录下打开CMD

类似的道理,我们也可以在命令执行: - mvn compile - mvn test - mvn package - mvn install
单元测试
**测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。 阶段划分:单元测试、集成测试、系统测试、验收测试。

1). 单元测试 - 介绍:对软件的基本组成单位进行测试,最小测试单位。 - 目的:检验软件基本组成单位的正确性。 - 测试人员:开发人员 2). 集成测试 - 介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。 - 目的:检查单元之间的协作是否正确。 - 测试人员:开发人员 3). 系统测试 - 介绍:对已经集成好的软件系统进行彻底的测试。 - 目的:验证软件系统的正确性、性能是否满足指定的要求。 - 测试人员:测试人员 4). 验收测试 - 介绍:交付测试,是针对用户需求、业务流程进行的正式的测试。 - 目的:验证软件系统是否满足验收标准。 - 测试人员:客户/需求方 测试方法:白盒测试、黑盒测试 及 灰盒测试。

1). 白盒测试 清楚软件内部结构、代码逻辑。 用于验证代码、逻辑正确性。 2). 黑盒测试 不清楚软件内部结构、代码逻辑。 用于验证软件的功能、兼容性、验收测试等方面。 3). 灰盒测试 结合了白盒测试和黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)。

Junit
之前在 61b用过,可以补充几个知识点
断言
| 断言方法 | 描述 |
|---|---|
| assertEquals(Object exp, Object act, String msg) | 检查两个值是否相等,不相等就报错。 |
| assertNotEquals(Object unexp, Object act, String msg) | 检查两个值是否不相等,相等就报错。 |
| assertNull(Object act, String msg) | 检查对象是否为null,不为null,就报错。 |
| assertNotNull(Object act, String msg) | 检查对象是否不为null,为null,就报错。 |
| assertTrue(boolean condition, String msg) | 检查条件是否为true,不为true,就报错。 |
| assertFalse(boolean condition, String msg) | 检查条件是否为false,不为false,就报错。 |
| assertSame(Object exp, Object act, String msg) | 检查两个对象引用是否相等,不相等,就报错。 |
示例演示:
常见注解
在JUnit中还提供了一些注解,还增强其功能,常见的注解有以下几个:
| 注解 | 说明 | 备注 |
| @Test | 测试类中的方法用它修饰才能成为测试方法,才能启动执行 | 单元测试 |
| @BeforeEach | 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。 | 初始化资源(准备工作) |
| @AfterEach | 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。 | 释放资源(清理工作) |
| @BeforeAll | 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。 | 初始化资源(准备工作) |
| @AfterAll | 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。 | 释放资源(清理工作) |
| @ParameterizedTest | 参数化测试的注解 (可以让单个测试运行多次,每次运行时仅参数不同) | 用了该注解,就不需要@Test注解了 |
| @ValueSource | 参数化测试的参数来源,赋予测试方法参数 | 与参数化测试注解配合使用 |
| @DisplayName | 指定测试类、测试方法显示的名称 (默认为类名、方法名) |
演示 @BeforeEach,@AfterEach,@BeforeAll,@AfterAll 注解:
演示 @ParameterizedTest ,@ValueSource ,@DisplayName 注解:
输出结果如下:

依赖范围
依赖的jar包,默认情况下,可以在任何地方使用,在main目录下,可以使用;在test目录下,也可以使用。 在maven中,如果希望限制依赖的使用范围,可以通过 <scope>…</scope> 设置其作用范围。 scope的取值常见的如下:
| scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
|---|---|---|---|---|
| compile(默认) | Y | Y | Y | log4j |
| test | - | Y | - | junit |
| provided | Y | Y | - | servlet-api |
| runtime | - | Y | Y | jdbc驱动 |