java开发需要掌握的maven相关知识和Junit单元测试

maven简介

什么是maven:

maven是一款管理和构建java项目的工具,是apache旗下的一个开源项目。

maven的作用:
依赖管理:

方便快捷的管理项目依赖的资源(jar包)。

项目构建:

标准化的跨平台(Linux,windows,macOs)的自动化项目构建方式。

统一项目结构:

提供标准,统一的项目结构。

maven概述:
仓库:

用于存储资源,管理各种jar包

本地仓库:自己计算机上的一个目录

中央仓库:由maven团队维护的全球唯一的。仓库地址(https://repo1.maven.org/maven2/)

远程仓库(私服):一般由公司团队搭建的私有仓库

安装:
  • 1,解压 apache-maven-3.9.4-bin.zip
  • 2,配置本地仓库:创建一个本地仓库文件夹
  • 3,修改 conf/settings.xml 中的 <localRepository> 为一个指定目录
  • 4,配置阿里云私服:修改 conf/settings.xml 中的 <mirrors> 标签,为其添加如下子标签

<mirror>

<id>alimaven</id>

<name>aliyun maven</name>

<url>http://maven.aliyun.com/nexus/content/groups/public/\</url>

<mirrorOf>central</mirrorOf>

</mirror>

  • 5,指定jdk版本

<profile>

<id>jdk-21</id>

<activation>

<activeByDefault>true</activeByDefault>

<jdk>21</jdk>

</activation>

<properties>

<maven.compiler.source>21</maven.compiler.source>

<maven.compiler.target>21</maven.compiler.target>

<maven.compiler.compilerVersion>21</maven.compiler.compilerVersion>

</properties>

</profile>

  • 6,配置环境变量: MAVEN_HOME 为maven的解压目录,并将其bin目录加入PATH环境变量

第一步:解压

第二步:创建本地仓库

第三步:修改conf/settings.xml

第四步:配置阿里云私服

第五步:指定jdk版本

第六步:配置环境变量 MAVEN_HOME

在path里面配置bin

测试:window+r 输入mvn -v

能看见版本信息就代表成功

IDEA集成maven

第一步:close Project

第二步:点击 customize 右下角的 All settings

第三步:点击 Build,Exception,Depliyment下面的Build Tools下面的maven进行配置

第四步:点击 Build,Exception,Depliyment下面的Build Tools下面的Runner 进行配置

第五步:点击 Build,Exception,Depliyment下面的 Compiler里面的java Compiler

现在IDEA已经集成maven了

创建maven项目:

第一步:先创建一个空项目

第二步:点击在右上角的设置。找到Project Structure

第三步:在project里面设置jdk版本

导入模块:

第一步:在新创建的工程右击,

第二步:选择 new Module

第三步:导入module

第二步选择要导入的模块:

第三步:选择 import module

第四步:点击pom.xml添加:

第二种方式导入模块:

还是点击pom.xml

移除模块:

第一步:点击要移除的module右击

第二步:在compiler.xml删除缓存文件

maven坐标:
什么是坐标?
  • maven中的坐标是资源(jar)包的唯一标识,通过该坐标可以唯一定位资源位置。
  • 使用坐标来定义项目或者引入项目中需要的依赖。
  • maven坐标主要组成

groupId:定义当前maven项目隶属组织名称(通常是域名反写,例如:com.baidu)

artifactId:定义当前maven项目名称(通常是模块名称,例如 user-service、user-service)

  • version:定义当前项目版本号

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

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

依赖配置:

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

配置:

1,在pom.xml中编写<dependencies>标签

2,在<dependencies>标签中使用<dependcy>引入坐标

3,定义坐标的groupId,artifiactId,version

4,点击刷新按钮,引入最新的加入的坐标

示例:

依赖传递:

直接依赖:在当前项目中通过依赖配置建立的依赖关系

间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本。

这样点就出来了

排除依赖
生命周期:

maven中有三套相互独立的生命周期

clean:清理工作

default:核心工作,如:编译,打包,测试,安装,部署

site:生成报告,发布站点

clean操作: 把已经编译好的target目录删除

compile操作:编译项目,出现target文件

test:单元测试:

package打包:在target里面会出现一个jar包

install:把项目打包到本地仓库

依赖范围:

依赖范围的jar包:默认情况下,可以在任何地方使用。可以通过<scope>设置其作用范围。

作为范围:

主程序范围有效。(main文件夹范围内)

测试程序范围有效。(test文件夹范围内)

是否参与打包运行。(package指令范围内)

单元测试:

测试概述:

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

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

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

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

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

使用步骤:

1,在pom.xml中,引入Junit的依赖

2,在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。

3,运行单元测试 (测试通过:绿色;测试失败:红色)。

常见注解:

@Test:测试类中的方法用它修饰才能成为测试方法,才能启动执行

@BeforeEach:用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。

@AfterEach:用来修饰一个实例方法,该方法会在每一个方法执行之后执行。

@BeforeAll:用来修饰静态方法,该方法会在所有测试方法执行之前只执行一次。

@AfterAll:用来修饰一个静态方法,该方法会在所有实例方法之前只会执行一次。

@ParameterizedTest:参数化测试的注解 (可以让单个测试运行多次,每次运行时仅参数不同)

@ValueSource:参数化测试的参数来源,赋予测试方法参数

@DisplayName:指定测试类、测试方法显示的名称 (默认为类名、方法名)

代码示例1:

java 复制代码
package com.sde.test.test2;

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

@DisplayName("用户相关的测试")
public class UserService1Test {
    private final String card1 = "610110201909091231";
    private final String card2 = "110110201509091109";
    private final String card3 = "510310198812120931";

    /**
     * 测试是否是北京
     */
    @DisplayName("测试是否是北京地区")
    @Test
    public void testIsBeijing(){
        boolean flag1 = new UserService().isBeijing(card1);
        boolean flag2 = new UserService().isBeijing(card2);
        boolean flag3 = new UserService().isBeijing(card3);
        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3);
    }

    /**
     * 测试年龄
     */
    @DisplayName("测试用户的年龄")
    @Test
    public void testGetAge(){
        Integer age1 = new UserService().getAge(card1);
        Integer age2 = new UserService().getAge(card2);
        Integer age3 = new UserService().getAge(card3);
        System.out.println(age1);
        System.out.println(age2);
        System.out.println(age3);
    }

    /**
     * 测试性别
     */
    @DisplayName("测试用户的性别")
    @Test
    public void testGetGender(){
        String gender1 = new UserService().getGender(card1);
        String gender2 = new UserService().getGender(card2);
        String gender3 = new UserService().getGender(card3);
        System.out.println(gender1);
        System.out.println(gender2);
        System.out.println(gender3);
    }

    /**
     * 测试出生年份
     */
    @DisplayName("测试出生年份")
    @Test
    public void testYear(){
        String year1 = new UserService().getYear(card1);
        String year2 = new UserService().getYear(card2);
        String year3 = new UserService().getYear(card3);
        System.out.println(year1);
        System.out.println(year2);
        System.out.println(year3);
    }

    /**
     * 测试出生月份
     */
    @DisplayName("测试出生月份")
    @Test
    public void testGetMonth(){
        String month1 = new UserService().getMonth(card1);
        String month2 = new UserService().getMonth(card2);
        String month3 = new UserService().getMonth(card3);
        System.out.println(month1);
        System.out.println(month2);
        System.out.println(month3);
    }

}

测试案例2:

java 复制代码
package com.sde.test.test2;

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

@DisplayName("用户相关的测试")
public class UserService2Test {

    @DisplayName("测试是否是北京地区")
    @ParameterizedTest
    @ValueSource(strings = {"610110201909091231","110110201509091109","510310198812120931"})
    public void testIsBeijing(String cardId){
        boolean b = new UserService().isBeijing(cardId);
        System.out.println(b);
    }

    @DisplayName("测试用户的年龄")
    @ParameterizedTest
    @ValueSource(strings = {"610110201909091231","110110201509091109","510310198812120931"})
    public void testGetAge(String cardId){
        Integer age = new UserService().getAge(cardId);
        System.out.println(age);
    }

    @DisplayName("测试用户的性别")
    @ParameterizedTest
    @ValueSource(strings = {"610110201909091231","110110201509091109","510310198812120931"})
    public void testGetGender(String cardId){
        String gender = new UserService().getGender(cardId);
        System.out.println(gender);
    }

    @DisplayName("测试出生年份")
    @ParameterizedTest
    @ValueSource(strings = {"610110201909091231","110110201509091109","510310198812120931"})
    public void testGetYear(String cardId){
        String year = new UserService().getYear(cardId);
        System.out.println(year);
    }

    @DisplayName("测试出生月份")
    @ParameterizedTest
    @ValueSource(strings = {"610110201909091231","110110201509091109","510310198812120931"})
    public void testGetMonth(String cardId){
        String month = new UserService().getMonth(cardId);
        System.out.println(month);
    }

}

案例3:

java 复制代码
package com.sde.test.test2;

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

@DisplayName("用户相关的测试")
public class UserServer3Test {
    private final String card1 = "610110201909091231";
    private final String card2 = "110110201509091109";
    private final String card3 = "510310198812120931";

    /**
     * 测试是否是北京
     */
    @DisplayName("测试是否是北京地区")
    @Test
    public void testIsBeijing(){
        boolean flag1 = new UserService().isBeijing(card1);
        boolean flag2 = new UserService().isBeijing(card2);
        boolean flag3 = new UserService().isBeijing(card3);
        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3);
        Assertions.assertFalse(flag1);
        Assertions.assertTrue(flag2);
        Assertions.assertFalse(flag3);
    }

    /**
     * 测试年龄
     */
    @DisplayName("测试用户的年龄")
    @Test
    public void testGetAge(){
        Integer age1 = new UserService().getAge(card1);
        Integer age2 = new UserService().getAge(card2);
        Integer age3 = new UserService().getAge(card3);
        System.out.println(age1);
        System.out.println(age2);
        System.out.println(age3);
        Assertions.assertEquals(4,age1,"4岁");
        Assertions.assertEquals(8,age2,"8岁");
        Assertions.assertEquals(34,age3,"34岁");
    }

    /**
     * 测试性别
     */
    @DisplayName("测试用户的性别")
    @Test
    public void testGetGender(){
        String gender1 = new UserService().getGender(card1);
        String gender2 = new UserService().getGender(card2);
        String gender3 = new UserService().getGender(card3);
        System.out.println(gender1);
        System.out.println(gender2);
        System.out.println(gender3);
        Assertions.assertEquals("男",gender1,"男");
        Assertions.assertEquals("女",gender2,"女");
        Assertions.assertEquals("男",gender3,"男");
    }

    /**
     * 测试出生年份
     */
    @DisplayName("测试出生年份")
    @Test
    public void testYear(){
        String year1 = new UserService().getYear(card1);
        String year2 = new UserService().getYear(card2);
        String year3 = new UserService().getYear(card3);
        System.out.println(year1);
        System.out.println(year2);
        System.out.println(year3);
        Assertions.assertEquals("2019",year1,"2019");
        Assertions.assertEquals("2015",year2,"2015");
        Assertions.assertEquals("1988",year3,"1988");
    }

    /**
     * 测试出生年份
     */
    @DisplayName("测试出生月份")
    @Test
    public void testGetMonth(){
        String month1 = new UserService().getMonth(card1);
        String month2 = new UserService().getMonth(card2);
        String month3 = new UserService().getMonth(card3);
        System.out.println(month1);
        System.out.println(month2);
        System.out.println(month3);
        Assertions.assertEquals("09",month1,"09");
        Assertions.assertEquals("09",month2,"09");
        Assertions.assertEquals("12",month3,"12");
    }
}
断言:

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)---检查两个对象引用是否相等,不相等,就报错。

案例:

java 复制代码
package com.sde.test.test2;

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

@DisplayName("用户相关的测试")
public class UserServer3Test {
    private final String card1 = "610110201909091231";
    private final String card2 = "110110201509091109";
    private final String card3 = "510310198812120931";

    /**
     * 测试是否是北京
     */
    @DisplayName("测试是否是北京地区")
    @Test
    public void testIsBeijing(){
        boolean flag1 = new UserService().isBeijing(card1);
        boolean flag2 = new UserService().isBeijing(card2);
        boolean flag3 = new UserService().isBeijing(card3);
        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3);
        Assertions.assertFalse(flag1);
        Assertions.assertTrue(flag2);
        Assertions.assertFalse(flag3);
    }

    /**
     * 测试年龄
     */
    @DisplayName("测试用户的年龄")
    @Test
    public void testGetAge(){
        Integer age1 = new UserService().getAge(card1);
        Integer age2 = new UserService().getAge(card2);
        Integer age3 = new UserService().getAge(card3);
        System.out.println(age1);
        System.out.println(age2);
        System.out.println(age3);
        Assertions.assertEquals(4,age1,"4岁");
        Assertions.assertEquals(8,age2,"8岁");
        Assertions.assertEquals(34,age3,"34岁");
    }

    /**
     * 测试性别
     */
    @DisplayName("测试用户的性别")
    @Test
    public void testGetGender(){
        String gender1 = new UserService().getGender(card1);
        String gender2 = new UserService().getGender(card2);
        String gender3 = new UserService().getGender(card3);
        System.out.println(gender1);
        System.out.println(gender2);
        System.out.println(gender3);
        Assertions.assertEquals("男",gender1,"男");
        Assertions.assertEquals("女",gender2,"女");
        Assertions.assertEquals("男",gender3,"男");
    }

    /**
     * 测试出生年份
     */
    @DisplayName("测试出生年份")
    @Test
    public void testYear(){
        String year1 = new UserService().getYear(card1);
        String year2 = new UserService().getYear(card2);
        String year3 = new UserService().getYear(card3);
        System.out.println(year1);
        System.out.println(year2);
        System.out.println(year3);
        Assertions.assertEquals("2019",year1,"2019");
        Assertions.assertEquals("2015",year2,"2015");
        Assertions.assertEquals("1988",year3,"1988");
    }

    /**
     * 测试出生年份
     */
    @DisplayName("测试出生月份")
    @Test
    public void testGetMonth(){
        String month1 = new UserService().getMonth(card1);
        String month2 = new UserService().getMonth(card2);
        String month3 = new UserService().getMonth(card3);
        System.out.println(month1);
        System.out.println(month2);
        System.out.println(month3);
        Assertions.assertEquals("09",month1,"09");
        Assertions.assertEquals("09",month2,"09");
        Assertions.assertEquals("12",month3,"12");
    }
}
相关推荐
轮到我狗叫了29 分钟前
栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历
java·算法·leetcode
冰之杍2 小时前
Vscode进行Java开发环境搭建
java·ide·vscode
跳动的梦想家h5 小时前
黑马点评 秒杀下单出现的问题:服务器异常---java.lang.NullPointerException: null(已解决)
java·开发语言·redis
苹果醋35 小时前
前端面试之九阴真经
java·运维·spring boot·mysql·nginx
哎呦没5 小时前
Spring Boot OA:企业办公自动化的高效路径
java·spring boot·后端
真心喜欢你吖5 小时前
Spring Boot与MyBatis-Plus的高效集成
java·spring boot·后端·spring·mybatis
2402_857589365 小时前
企业办公自动化:Spring Boot OA管理系统开发与实践
java·spring boot·后端
G丶AEOM6 小时前
JVM逃逸分析机制
java·jvm
无聊写博客6 小时前
JDK、JRE、JVM的区别
java·开发语言·jvm
message丶小和尚6 小时前
SpringBoot升级全纪录之项目启动
java·spring boot·mybatis