史上最全Maven教程(三)

文章详细介绍了如何在Maven工程中使用Junit进行测试,包括测试步骤、结果判定以及使用@Before和@After注解。此外,还探讨了Maven解决依赖冲突的策略,如最短路径优先原则和最先声明原则,并提供了排除依赖和锁定版本的方法。
摘要由CSDN通过智能技术生成

🔥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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

造次阿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值