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:

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("测试是否是北京地区")@Testpublic 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("测试用户的年龄")@Testpublic 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("测试用户的性别")@Testpublic 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("测试出生年份")@Testpublic 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("测试出生月份")@Testpublic 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:

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:

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("测试是否是北京地区")@Testpublic 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("测试用户的年龄")@Testpublic 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("测试用户的性别")@Testpublic 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("测试出生年份")@Testpublic 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("测试出生月份")@Testpublic 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)---检查两个对象引用是否相等,不相等,就报错。

案例:

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("测试是否是北京地区")@Testpublic 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("测试用户的年龄")@Testpublic 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("测试用户的性别")@Testpublic 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("测试出生年份")@Testpublic 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("测试出生月份")@Testpublic 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");}
}

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

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

相关文章

开发知识点-CSS样式

CSS样式 fontCSS 外边距 —— 围绕在元素边框的空白区域# linear-gradient() ——创建一个线性渐变的 "图像"# transform ——旋转 元素![在这里插入图片描述](https://img-blog.csdnimg.cn/20191204100321698.png)# rotate() [旋转] # 边框 (border) —— 围绕元素内…

计算机毕业设计php+bootstrap小区物业管理系统

意义&#xff1a;随着我国经济的发展和人们生活水平的提高&#xff0c;住宅小区已经成为人们居住的主流&#xff0c;人们生活质量提高的同时&#xff0c;对小区物业管理的要求也越来越高&#xff0c;诸如对小区的维修维护&#xff0c;甚至对各项投诉都要求小区管理者做得好&…

人工智能-优化算法之梯度下降

梯度下降 尽管梯度下降&#xff08;gradient descent&#xff09;很少直接用于深度学习&#xff0c; 但了解它是理解下一节随机梯度下降算法的关键。 例如&#xff0c;由于学习率过大&#xff0c;优化问题可能会发散&#xff0c;这种现象早已在梯度下降中出现。 同样地&#x…

《微信小程序开发从入门到实战》学习三十四

4.2 云开发JSON数据库 MySQL、Oracle之类的“关系型数据库”。JSON数据库是“非关系型数据库”&#xff0c;没有行表列的概念。 4.2.1 JSON数据库基本概念 集合:一个数据库有多个集合&#xff0c;一个集合存储通常是同一类数据&#xff0c;可看作为JSON数组&#xff0c;数组…

P25 C++ const关键字

前言 本期我们要讲的是 C 中的 const 关键字。 const 在改变生成代码方面做不了什么&#xff0c;它有点像类和结构体的可见性&#xff0c;这是一个机制&#xff0c;可以让我们的代码更加干净&#xff0c;并对开发人员写代码强制特定的规则。 const 就像你做出的承诺&#xf…

王者小游戏

游戏里的经验动物 Bear package beast; import sxt.GameFrame; public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("C:\\Users\\辛欣\\OneDrive\\桌面\\王者荣耀图片(1)\\王者荣耀图片\\beast\\bear.jp…

MacBook如何远程控制华为手机?

将手机屏幕投影到电脑上可以提供更大的屏幕空间&#xff0c;方便观看电影、浏览照片、阅读文档等。然而&#xff0c;除了想将手机投屏到电脑&#xff0c;还想要在电脑上直接操作手机&#xff0c;有方法可以实现吗&#xff1f; 现在使用AirDroid Cast的远程控制手机功能就可以实…

【CVE-2023-49103】ownCloud graphapi信息泄露漏洞(2023年11月发布)

漏洞简介 ownCloud owncloud/graphapi 0.2.x在0.2.1之前和0.3.x在0.3.1之前存在漏洞。graphapi应用程序依赖于提供URL的第三方GetPhpInfo.php库。当访问此URL时&#xff0c;会显示PHP环境的配置详细信息&#xff08;phpinfo&#xff09;。此信息包括Web服务器的所有环境变量&a…

ArkTS-WebView内嵌H5页面

鸿蒙开发使用WebView内嵌H5页面 访问在线网页时需添加网络权限&#xff1a;ohos.permission.INTERNET module.json5文件配置 {"module" : {"requestPermissions":[{"name": "ohos.permission.INTERNET"}]} }踩坑日记 加载网页效果无法…

C# datagridview控件 绑定数据库中表中数据的方式-3

1.如下图所示&#xff0c;为数据库中的一张表结构&#xff0c;注意该表中共有11个字段 2.首先在窗体后台代码中拖入一个datagridview控件&#xff0c;并在窗体加载时&#xff0c;给datagridview控件添加列&#xff0c;添加的方式如下所示&#xff1a;请注意&#xff0c;每个列…

[操作系统] 面试宝典之~死锁连环系列

文章目录 2.22 什么是死锁2.24 解决死锁的方法死锁的预防死锁的避免死锁的检测死锁的解除 2.22 什么是死锁 在多道程序环境下&#xff0c;多个进程可以竞争有限数量的资源。当一个进程申请资源时&#xff0c;如果这时没有可用资源&#xff0c;那么这个进程进入等待状态。有时&…

项目五 配置与管理磁盘

项目五 配置与管理磁盘 磁盘配额&#xff08;Quota&#xff09;&#xff0c;磁盘阵列&#xff08;RAID&#xff09;&#xff0c;逻辑滚动文件系统&#xff08;LVM&#xff09; #职业能力目标和要求 1&#xff0c;掌握Linux下的磁盘管理工具的使用方法 2&#xff0c;掌握Linux…

Kafka事务机制:原理和实践

Kafka事务机制&#xff1a;原理和实践 Apache Kafka 是一个分布式流处理平台&#xff0c;广泛用于构建实时数据管道和流应用程序。它不仅以高吞吐量、可扩展性和容错能力著称&#xff0c;还提供了事务支持&#xff0c;以确保数据的完整性和一致性。在这篇博客中&#xff0c;我…

虚拟公户如何让企业节税

近年来&#xff0c;电商行业迅猛发展&#xff0c;对于从事电商会计工作的人来说&#xff0c;加班已经成为家常便饭。随着移动技术的进步&#xff0c;电商与消费者之间的联系越来越紧密。每次购物节后&#xff0c;大家都非常关注天猫企业商家和电商会计如何通过节税来降低成本。…

时尚和美容网站的技术 SEO:提示和最佳实践

如果你对美容和时尚感兴趣&#xff0c;做了一个网站&#xff0c;但不知道如何在上面做技术SEO&#xff1f;此外&#xff0c;时尚和美容网站的技术 SEO 没有任何特别的指南&#xff01; 我们听到了你的声音&#xff01;但首先&#xff0c;请记住&#xff0c;技术性SEO不是在一两…

HCIP --- MGRE综合实验

一、总体规划 二、AR1配置思路及步骤 一、接口地址分配及缺省路由&#xff1a; The device is running! AR1&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sy r1 [r1]interface s4/0/0 [r1-Serial4/0/0]ip address 15.0.0.1 255.0…

【Cisco Packet Tracer】DHCP/FTP/WEB/DNS实验

本文使用CiscoPacketTracer仿真软件实现了DHCP/FTP/WEB/DNS实验&#xff0c;拓扑中包含2个客户机和3个服务器&#xff08;DHCP服务器、DNS服务器、FTP/WEB公用一个服务器&#xff09;&#xff0c;客户机的IP地址由DHCP服务器动态分配。 DHCP服务器IP地址&#xff1a;192.168.0…

【Rust】基本的语法概念

Rust初学习 常见概念变量与可变性变量常量隐藏 数据类型标量类型字符类型复合类型元组数组 函数参数语句和表达式具有返回值的函数 注释控制流使用循环重复执行 常见概念 变量与可变性 变量 fn main() {let x 5;println!("The value of x is: {x}");x 6;println…

Apipost也出IDEA插件了?Apipost-Helper!

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

国产操作系统-银河麒麟V10

一、介绍 银河麒麟操作系统隶属于麒麟软件&#xff0c;麒麟软件是专业从事国产操作系统研发和产业化的企业&#xff0c;面向通用和专用领域打造安全创新的国产操作系统产品和相应解决方案&#xff0c;旗下拥有银河麒麟、中标麒麟、星光麒麟三大产品品牌。 麒麟软件官方网站地…