一、什么是Maven?有什么作用?

以后开发后端项目不用idea了,用maven
Maven作用一:


可以随时更改jar包的版本,只需写这几行代码,就可以引入jar包。
作用二:


- 只需双击右侧的 compile、test、package指令,就可以完成编译(java文件编译成.class字节码文件)、测试、打包。点击之后在左侧项目栏处就会有target包。
- 并且,这些指令都是跨平台的,Windows、Linux、MacOS都能使用这些构建项目的指令。
作用三:


这样的目录结构可以降低开发维护管理项目的成本。
java文件是存放的项目源代码,而resources存放的是项目的配置文件。
二、Maven初步了解
**pom.xml 中含有:**描述当前项目信息:项目名称、所在包、项目版本、配置文件:用的是JDK哪个版本、编码方式是utf-8等等。

并且,**pom.xml 中还含有:**依赖项。

这些依赖的jar包都存储在哪里呢?------仓库


设置的本地仓库文件夹:

在Maven中,项目都是连接本地仓库这个文件夹来构成依赖的。

安装Maven:

创建Maven项目:

右击web-ai-project01项目,创建 module模块------maven-project01,之后在main的java文件夹下创建com.itheima.Test01 的java运行文件,这样Test01.java文件就可以运行了。
Maven坐标

自己的项目模块有坐标,引入的依赖项也有坐标。坐标是每一个依赖包或者自己项目模块的唯一标志。

导入Maven项目
把其他 Maven模块 导入这个 maven项目 中。



如果要导入的不是模块,而是要将某个java文件导入idea的某个包中,就可以用原始的赋值粘贴的方式完成。只有导入的是模块,才按上述执行。
Maven 依赖管理(根据坐标完成)
通过中央仓库网址:Maven Repository: Search/Browse/Explore 找到对应第三方jar包的坐标。
网页下面的代码直接粘贴复制到项目模块的pom.xml中

将坐标写入对应项目模块的 pom.xml 文件中--------刷新--------点击右侧 M 按钮查看是否下载依赖

Maven还具有依赖传递,当引入的依赖A 还依赖依赖B,则会把依赖B也引入进来。
Maven排除依赖
当依赖A 的某些依赖B,不需要存在于项目模块中时,就可以采用排除依赖exclusion:


micrometer-observation原本还显示在右边的Dependencies目录中,刷新后就没了。

Maven生命周期


clean:移除上一次项目构建产生的字节码class文件、jar包,其实就是删除对应模块的target目录

点击install,clean不会执行,因为不属于同一套生命周期,其余的compile、test等可以运行。
如何执行生命周期某个阶段?

点击install后,会把打包后的jar包放在本地仓库中,找的时候在仓库中按照坐标groupID......来找

第二种方式:用cmd。命令: mvn clean


各个生命周期clean、test、compile都是通过底层的插件来完成的。


三、单元测试
3.1 什么是测试



3.2 单元测试(对方法的测试)

不用main方法,要采用JUnit框架。

单元测试案例

UserService是一个类,类中有很多方法,如getage和getgender等,
一个单元测试类UserServiceTest可以测试UserService类的所有方法,测试方法自己写,一个测试方法 针对 JavaBean类的某个方法。
代码:
1)先写JUnit的依赖项

2)再写测试类和测试方法,测试方法必须public void开头
3)点击运行
测试类左边的箭头点击后--------所有的测试方法都运行--------所有方法都被测试
某个测试方法左边的箭头点击后-----------只这个测试方法运行----------只测试该方法

总结

3.3 断言

代码示例:


总结

3.4 注解

代码示例:

输出结果:


- displayName注解要写在 测试类 或者 测试方法 的上面,
- 参数化测试是要在上面写明valuesource,在实际执行的时候,是会把strings中的元素一个一个带入到测试方法的形参中运行的。
总结:

3.5 企业级开发规范------单元测试
就是:要测试所有的可能情况,特别是边界值,比如null、" "、少于 or 大于 规定长度18。

代码示例:



点击测试类左边运行按钮的第三个:使用覆盖率运行。

输出结果:右边的覆盖按钮还有一个覆盖率。

覆盖率:

测试了一个类:UserService。测试了该类的一个方法method:getGender。该类的代码只测试了37%。分支是测试了60%
之后把getAge方法的测试也加了上去:


之后点击 "使用覆盖率运行"

全部都覆盖了。
修改覆盖率的测试对象方法:



要尽可能的覆盖业务方法(getAge、getGender)中所有可能的情况,特别是边界值。
单元测试其实和普通的方法、普通的类没有区别。唯一的区别就是多了个注解 :@Test,(3.4 注解部分)。当一个方法有了@Test这样的注解之后,控制台就可以判断对错。如图:

3.6 依赖范围

就是让main只能写主程序,test只能写测试程序。
这些所有测试方法,能够测试的原因就是因为JUnit这个依赖jar包,所以我们就可以限制规定这个jar包的使用范围。默认情况下,依赖的jar包是任何地方都能用,所以main主程序就能写单元测试代码。

表格中,打包(运行)指的是:在package双击后,不会把该jar包打包。
代码示例:

这样在main主程序中就写不了测试程序了。

双击test测试生命周期,该模块的所有代码都会测试,但测试类、测试方法的名字一定要写规范。
如果双击package打包生命周期,不想让执行测试test阶段(因为前面已经test过了),就点击切换"跳过测试"模式。
3.7 Maven中常见的问题



