史上最全Maven教程(三)

news2024/11/16 21:56:54

文章目录

    • 🔥Maven工程测试_Junit使用步骤
    • 🔥Maven工程测试_Junit结果判定
    • 🔥Maven工程测试_@Before、@After
    • 🔥依赖冲突调解_最短路径优先原则
    • 🔥依赖冲突调解_最先声明原则
    • 🔥依赖冲突调解_排除依赖、锁定版本

🔥Maven工程测试_Junit使用步骤

在这里插入图片描述
在Maven项目中引入依赖

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

定义被测试的类

我们定义一个计算器工具类。

public class Calculator {
    // 加法
    public int add(int a,int b){
        return a+b;
   }
    // 除法
    public int div(int a,int b){
        return a/b;
   }
}

对定义的类进行测试

⭐ 创建src/test/java包,并将改包设置为测试包。
⭐ 在src/test/java中创建测试类的包,包名一般与被测试包名一致。
⭐ 定义测试类,类名一般为被测试类+Test
在这里插入图片描述

⭐ 测试类中编写测试方法。

public class CalculatorTest {
    /**
     * 测试方法是可以独立运行的,写法如下:
     * 1.方法名一般为test+被测试方法名
     * 2.方法上方添加@Test
     * 3.测试方法没有参数和返回值
     */
    @Test
    public void testAdd(){
        Calculator calculator = new Calculator();
        int add = calculator.add(1, 2);
        System.out.println(add);
   }
    @Test
    public void testDiv(){
        Calculator calculator = new
Calculator();
        int div = calculator.div(2,0);
        System.out.println(div);
   }
}

🔥Maven工程测试_Junit结果判定

在这里插入图片描述

点击测试方法边的三角运行测试方法,如果出现绿色对钩,证明方法能正常运行;如果出现红色感叹号,证明方法抛出异常,需要修改方法。
在这里插入图片描述

当然,不是能正常运行就代表方法一定没有问题,也有可能方法的结果和预期结果不一致,这时就需要使用断言操作。

@Test
public void testAdd(){
    Calculator calculator = new
Calculator();
    int add = calculator.add(1, 2);
    /**
     * 断言
     * 参数1:预期结果,参数2:实际结果
     */
    Assert.assertEquals(2,add);
 }

如果真实结果和预期结果不一致,则会抛出以下异常:
在这里插入图片描述

🔥Maven工程测试_@Before、@After

在这里插入图片描述

在测试类中,@Before 修饰的方法会在测试方法之前自动执行,@After 修饰的方法会在测试方法执行之后自动执行。我们可以设置前置方法为获取资源,后置方法为释放资源。

@Before
public void before(){
    System.out.println("开始测试");
}
@After
public void after(){
    System.out.println("结束测试");
}

🔥依赖冲突调解_最短路径优先原则

在这里插入图片描述

依赖冲突产生的原因——依赖传递

假设你的项目依赖jar包A,jar包A又依赖jar包B。当添加jar包A时,Maven会把jar包B也自动加入到项目中。比如刚刚我们添加了 junit 依赖,junit 又依赖hamcrest,所以Maven会将junit和hamcrest都加入项目中。
在这里插入图片描述

这时就可能会产生依赖冲突问题,比如依赖A会引入依赖C,依赖B也会引入依赖C。如果不进行调解则会引入两个依赖C,那么Maven是如何解决依赖冲突问题的呢?
在这里插入图片描述

依赖冲突调解

我们以Spring依赖为例,spring-webmvc依赖spring-aop,spring-context也依赖spring-aop,如果两个同时引入,会引入哪个版本的spring-aop呢?

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>

Maven调解依赖冲突的第一原则是最短路径优先原则:

也就是说项目依赖关系树中路径最短的版本会被使用。例如,假设有几个jar包之间的依赖关系是: A->B->C->D(2.0)E->F->D(1.0) ,如果同时引入A和E,那么D(1.0)会被使用,因为E到D的路径更短。

查看依赖路径的方式如下:
在这里插入图片描述

spring-webmvc到spring-aop的路径如下:
在这里插入图片描述

spring-context到spring-aop的路径如下:
在这里插入图片描述

可以看到,spring-webmvc 到spring-aop 的路径为:

 spring-webmvc -> spring-context -> spring-aop

而spring-context到spring-aop的路径为:

spring-context -> spring-aop

spring-context到spring-aop的路径更短,所以spring-aop会按照spring-context的版本引入。
在这里插入图片描述

🔥依赖冲突调解_最先声明原则

在这里插入图片描述

最短路径优先原则不能解决所有问题,比如这样的依赖关系: A–>B–>C(1.0)D–>E–>C(2.0) ,同时引入A和D之后,C(1.0)和C(2.0)的依赖路径长度都为2。此时第一原则将不能解决问题

Maven调解依赖冲突的第二原则是最先声明原则:
在依赖路径长度相等的前提下,在POM中依赖声明的顺序靠前的会被解析使用。比如:以上案例中,spring-webmvc和spring-context到spring-core的路径都为1。谁声明在上方,spring-core会按照谁的版本引入。
在这里插入图片描述
在这里插入图片描述

🔥依赖冲突调解_排除依赖、锁定版本

在这里插入图片描述

如果不想使用Maven默认的冲突调解方式,有两种方式可以手动进行冲突调解。

排除依赖

比如以上案例中,想使用spring-webmvc的spring-aop包,那么可以让spring-context引入时排除引入spring-aop包,这样就可以使用spring-webmvc的spring-aop包了,写法如下

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.12.RELEASE</version>
    <exclusions>
        <exclusion>
      <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
        </exclusion>
     </exclusions>
</dependency>

锁定版本

在Maven中为某个jar包配置锁定版本后,不考虑依赖的声明顺序和依赖路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。以下可以直接配置spring-aop锁定的版本。

<dependencyManagement>
    <dependencies>
        <dependency>
       <groupId>org.springframework</groupId>
          <artifactId>springaop</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

onnx手动操作001:onnx.helper

使用onnx.helper可以进行onnx的制造组装操作&#xff1a; 对象描述ValueInfoProto 对象张量名、张量的基本数据类型、张量形状算子节点信息 NodeProto算子名称(可选)、算子类型、输入和输出列表(列表元素为数值元素)GraphProto对象用张量节点和算子节点组成的计算图对象ModelP…

2023年测试岗,自动化测试我该如何进阶?卷出方向...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 先编程语言打好基…

BPMN2.0 网关

网关(gateway)用于控制执行的流向(或者按BPMN 2.0的用词:执行的“标志(token)”)。网关可以消费(consuming)与生成(generating)标志。 网关用其中带有图标的菱形表示。 排他网关 排他网关(exclusive gateway)(也叫异或网关 XOR gateway,或者更专业的,基于数据…

怎么把pdf压缩的小一点 这3种方式都很简单

在日常工作中&#xff0c;我们常常会遇到PDF文件太大无法上传的情况。这种情况在通过聊天工具传输工作PDF文件资料或在发送附件邮件时尤为常见。如果你也遇到过类似的问题&#xff0c;那么怎么把pdf压缩的小一点&#xff1f;网上的方法虽然很多但是查找起来也是非常费心费力的。…

【正点原子Linux连载】第三章 RKMedia编译和使用 摘自【正点原子】ATK-DLRV1126系统开发手册

第三章 RKMedia编译和使用 5.1 RKMedia编译 Rkmedia是RK官方封装一层简易的API&#xff0c;把RGA、MPP、RKNN等等这些接口封装成高级的接口。在SDK官方的源码目录下&#xff0c;运行以下命令进行跳转&#xff1a; cd external/rkmedia/examples/ ls 运行命令结果如下所示&…

激光雷达“进阶战”:谁在引领新风向?

激光雷达正进入新的发展阶段。 高工智能汽车注意到&#xff0c;伴随激光雷达在2022年第一波小规模前装导入&#xff0c;市场正尝试向中端车型渗透&#xff0c;以逐步迈向快速增长期。在这一阶段&#xff0c;谁能解决成本可控、性能提升的难题&#xff0c;同时帮车企用好激光雷…

鸟哥的Linux私房菜——基础学习篇(第三版) (6-10章)

基础学习篇 第六章 &#xff1a;Linux 的档案权限与目录配置第七章 &#xff1a;档案与目录管理第八章 &#xff1a;Linux 磁盘与文件系统管理第九章 &#xff1a;文件与文件系统的压缩与打包第十章 &#xff1a;Vim程序编辑器 第六章 &#xff1a;Linux 的档案权限与目录配置 …

浅述 国产仪器仪表 6121A 音频分析仪

6121A是具有音频信号产生和音频信号分析功能的测试仪器&#xff0c;适用于语音性能测试和音频功放测试等领域&#xff0c;满足电台、移动通信、音响设备和水声通信设备对频响、谐波失真和信噪比等指标的测试需求&#xff0c;是音频信号性能测试的常备仪器。 6121A音频分析仪具…

Hadoop2.x集群搭建(centos7、VMware、finalshell)

第一章 Hadoop集群安装 1.1 集群规划 集群规划规划操作系统Mac、Windows虚拟软件Parallels Desktop(Mac)、VMWare(Windows)虚拟机主机名: c1, IP地址: 192.168.10.101主机名: c2, IP地址: 192.168.10.102主机名: c3, IP地址: 192.168.10.103软件包上传路径/root/softwares软件…

持续集成下接口自动化测试实践

目录&#xff1a;导读 引言 接口自动化测试工具介绍 接口自动化测试在持续集成中的运用 小结 引言 目前很多持续集成项目都需要执行接口层的测试&#xff0c;当你了解其基本概念&#xff0c;理解了接口协议、如何传参、测试原理后&#xff0c;无需 掌握程序语言&#xff0…

【MySQL高级】——目录结构数据库和文件系统的关系

一、目录结构 <1> 主要目录结构 find / -name mysql<2> 数据库文件目录 目录&#xff1a;/var/lib/mysql/ 配置方式&#xff1a;show variables like ‘datadir’; <3> 相关命令目录 目录&#xff1a;/usr/bin&#xff08;mysqladmin、mysqlbinlog、my…

软件著作权申请流程待发放多久就能到已发放拿到纸质证书?

软件著作权申请一般有两种途径 1、代理 代理机构有加急通道&#xff0c;软件著作权交件后最快20-30工作日内出&#xff0c;待发放到已发放只要3工作日拿到就可以邮寄纸质证书给你了。 2、版权中心官网自己登记 流程比较缓慢&#xff0c;而且最要命的是&#xff0c;证书是用邮…

数据划分方法简述:数据离散化和均值标准差分级法(含python代码)

文章目录 1 问题缘起2. 数据离散化等距离散等频离散聚类离散其他 3. 均值标准差分级 1 问题缘起 在数学建模中&#xff0c;我经常遇到这样一个问题&#xff1a; 在某一步中&#xff0c;需要把数据分成好几个类别或者是按照数据大小分级划分。 放到一维数据中形象一点解释就是…

InstructGPT原理讲解及ChatGPT类开源项目

InstructGPT原理讲解及ChatGPT类开源项目 Generative Pre-Trained Transformer&#xff08;GPT&#xff09; 是OpenAI的提出的生成式预训练语言模型&#xff0c;目前已经发布了GPT-1、GPT-2、GPT-3和GPT-4&#xff0c;未来也将发布GPT-5。 最近非常火的ChatGPT是基于Instruct…

【ChatGPT】稳定性好响应速度快可部署到国内服务器的ChatGPT 强力推荐!

朋友们&#xff0c;大家好&#xff0c;我是 jonssonyan。今天分享一个免费开源的 ChatGPT 项目&#xff0c;它的表现无论是响应速度还是稳定性都比 ChatGPT Plus 还要优秀&#xff0c;只需要有个 Access Token 或者使用热心网友提供的共享账号 就可以免费在线体验&#xff0c;也…

Vicuna-13B量化模型单GPU可跑

链接在这&#xff08;需要科学上网&#xff09; Vicuna-13B: Best Free ChatGPT Alternative According to GPT-4 &#x1f92f; | Tutorial (GPU) 有人在B站转了人家的视频 ChatGPT&#xff1a;在你的本地电脑上运行Vicuna-13B &#x1f92f;|教程 (GPU) 下面就是部署的步骤…

023 - C++ 继承

本期我们学习 C 面向对象编程中的继承。 面向对象编程是一个巨大的编程范式&#xff0c;类之间的继承是它的一个基本面&#xff0c;它是我们可以实际利用的最强大的特性之一。 先了解这些 继承允许我们有一个相互关联的类的层次结构。展开来说&#xff0c;它允许我们有一个包…

Ceph入门到精通-Ceph介绍及放置规范

2.cephadm介绍 2.1cephadm介绍 Cephadm 是随着 Ceph 新版本 v15.2.0(Octopus)发布的安装工具&#xff0c;并且不支持 Ceph的旧版本&#xff0c;Ceph中已经Cephadm 不依赖于外部配置工具&#xff0c;如 Ansible、 Rook 和 Salt&#xff0c;它通过 SSH 将管理器守护进程连接到主机…

通信中间件

通信中间件需要解决什么问题 分布式系统中两个不同的系统需要进行通信的时候&#xff0c;使用的是scocket编程&#xff0c;需要直接面对网络中的四层模型&#xff0c;编程时需要确定目标端的详细物理地址。这是非常不方便的。为了解决这个问题&#xff0c;需要通信中间件来屏蔽…

Linux系统编程学习 NO.1 ——操作系统的历史发展

什么是操作系统&#xff1f; 首先&#xff0c;需要明白一个概念操作系统的本质是系统软件&#xff0c;我们平时在电脑上的界面就是一种图形化的操作系统界面。界面上通常安装可执行应用程序如QQ&#xff0c;wps等等&#xff0c;这些应用程序被称为应用软件。大家买的电脑其实是…