Maven
本文最后更新于14 天前,其中的信息可能已经过时,如有错误请发送邮件到1169063119@qq.com

什么是maven

Maven 是一款用于管理和构建Java项目的工具,是Apache旗下的一个开源项目 。

依赖管理

使用maven前

我们项目中要想使用某一个jar包,就需要把这个jar包从官方网站下载下来,然后再导入到项目中。然后在这个项目中,就可以使用这个jar包了。

使用maven后

当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中,添加一段如下图所示的配置即可实现。

Maven坐标

什么是坐标?

Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置

使用坐标来定义项目或引入项目中需要的依赖

Maven坐标主要组成:

  1. groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  2. artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  3. version:定义当前项目版本号

SNAPSHOT: 功能不稳定、尚处于开发中的版本,即快照版本

RELEASE: 功能趋于稳定、当前更新停止,可以用于发行的版本

依赖配置

依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖:

  1. 在pom.xml中编写<dependencies>标签
  2. 在<dependencies>标签中使用<dependency>引入坐标
  3. 定义坐标的 groupId、artifactId、version

生命周期

Maven对项目构建的生命周期划分为3套(相互独立):

  1. clean:清理工作。
  2. default:核心工作。如:编译、测试、打包、安装、部署等。
  3. site:生成报告、发布站点等。
  1. clean:移除上一次构建生成的文件
  2. compile:编译项目源代码
  3. test:使用合适的单元测试框架运行测试(junit)
  4. package:将编译后的文件打包,如:jar、war等
  5. install:安装项目到本地仓库

单元测试

测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

阶段划分:单元测试、集成测试、系统测试、验收测试。

1). 单元测试

介绍:对软件的基本组成单位进行测试,最小测试单位。

目的:检验软件基本组成单位的正确性。

测试人员:开发人员

2). 集成测试

介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。

目的:检查单元之间的协作是否正确。

测试人员:开发人员

3). 系统测试

介绍:对已经集成好的软件系统进行彻底的测试。

目的:验证软件系统的正确性、性能是否满足指定的要求。

测试人员:测试人员

4). 验收测试

介绍:交付测试,是针对用户需求、业务流程进行的正式的测试。

目的:验证软件系统是否满足验收标准。

测试人员:客户/需求方

测试方法:白盒测试、黑盒测试 及 灰盒测试。

1). 白盒测试

清楚软件内部结构、代码逻辑。

用于验证代码、逻辑正确性。

2). 黑盒测试

不清楚软件内部结构、代码逻辑。

用于验证软件的功能、兼容性、验收测试等方面。

3). 灰盒测试

结合了白盒测试和黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)。

Junit入门

单元测试

单元测试:就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试。

JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)

入门程序

需求:使用JUnit,对UserService中的业务方法进行单元测试,测试其正确性。

断言

JUnit提供了一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言。

UserService

package org.example;

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;

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"));
        return Period.between(parse, LocalDate.now()).getYears();
    }

    /**
     * 给定一个身份证号, 计算出该用户的性别
     * @param idCard 身份证号
     */
    public String getGender(String idCard){
        if (idCard == null || idCard.length() != 18) {
            throw new IllegalArgumentException("无效的身份证号码");
        }
        return Integer.parseInt(idCard.substring(16,17)) % 2 == 1 ? "男" : "女";
    }

}

UserServiceTest

package org.example;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class UserServiceTest {

    @BeforeAll
    public static void beforeAll() {
        System.out.println("Before All");
    }

    @AfterAll
    public static void afterAll() {
        System.out.println("After All");
    }

    @BeforeEach
    public void beforeEach() {
        System.out.println("Before Each");
    }

    @AfterEach
    public void afterEach() {
        System.out.println("After Each");
    }


    @Test
    public void testgetage(){

        UserService userService = new UserService();
        Integer age = userService.getAge("100000200201301011");
        System.out.println(age);
    }

    @Test
    public void testgetsex(){
        UserService userService = new UserService();
        String sex = userService.getGender("100000200201301011");
        System.out.println(sex);
    }

//    断言
    @Test
    public void testgenderwithAssert(){
        UserService userService = new UserService();
        String sex = userService.getGender("100000200201301011");
        //断言
        Assertions.assertEquals("男",sex,"性别获取有问题");
    }

    @Test
    public void testgenderwithAssert2(){
        UserService userService = new UserService();
        Assertions.assertThrows(IllegalArgumentException.class,()->{
            userService.getGender(null);
        });
    }
    @DisplayName("测试用户性别")
    @ParameterizedTest
    @ValueSource(strings = {"100000200201301011","100000200201301031","100000200201301051"})
    public void testgetgender(String idCard){
        UserService userService = new UserService();
        String gender = userService.getGender(idCard);
        Assertions.assertEquals("男",gender);
    }
}

UserServiceaiTest

package org.example;


import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class UserServiceaiTest {

    private UserService userService;

    @BeforeEach
    public void setUp() {
        userService = new UserService();
    }

    @Test
    @DisplayName("获取性别-空值")
    public void testGetGender_NullInput_ThrowsException() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender(null);
        });
    }

    @Test
    @DisplayName("获取性别-空串")
    public void testGetGender_EmptyString_ThrowsException() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("");
        });
    }

    @Test
    @DisplayName("获取性别-长度不足")
    public void testGetGender_LengthLessThan18_ThrowsException() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("110");
        });
    }

    @Test
    @DisplayName("获取性别-长度超出")
    public void testGetGender_LengthMoreThan18_ThrowsException() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("1000002002013010111234");
        });
    }

    @Test
    @DisplayName("获取性别-正常男性")
    public void testGetGender_ValidMaleIdCard_ReturnsMale() {
        String gender = userService.getGender("100000200201301011");
        Assertions.assertEquals("男", gender);
    }

    @Test
    @DisplayName("获取性别-正常女性")
    public void testGetGender_ValidFemaleIdCard_ReturnsFemale() {
        String gender = userService.getGender("100000200201301021");
        Assertions.assertEquals("女", gender);
    }
}

UserService2Test

package org.example;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class UserService2Test {

    private UserService userService;

    @BeforeEach
    public void setUp() {
        userService  = new UserService();
    }

    @Test
    @DisplayName("获取性别-null值")
    public void testGetGender1() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender(null);
        });
    }

    @Test
    @DisplayName("获取性别-空串")
    public void testGetGender2() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("");
        });
    }

    @Test
    @DisplayName("获取性别-长度不足")
    public void testGetGender3(){
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("110");
        });
    }

    @Test
    @DisplayName("获取性别-长度超出")
    public void testGetGender4() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("1000002002013010111234");
        });
    }

    @Test
    @DisplayName("获取性别-正常男性")
    public void testGetGender5() {
        String gender = userService.getGender("100000200201301011");
        Assertions.assertEquals("男", gender);
    }

    @Test
    @DisplayName("获取性别-正常男性")
    public void testGetGender6() {
        String gender = userService.getGender("100000200201301021");
        Assertions.assertEquals("女", gender);
    }
}
文末附加内容
上一篇
下一篇