MavenStudyNote

77 阅读5分钟

创建空项目之后,先选择空项目的 jdkjdk语言版本。

以下图中所有的位置都要相同版本

Maven1.png

Maven2.png

Maven3.png

Maven4.png

xml文件中的坐标

资源(jar包)的唯一标识,通过坐标可以定位到所需资源(jar包)位置。

坐标的组成部分

  • groupId: 组织名(域名反写)
  • arfitactId: 模块名
  • Version: 版本号

Maven仓库作用与分类

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

  • 本地仓库:自己计算机上的一个目录(用来存储jar包)
  • 中央仓库:由Maven团队维护的全球唯一的。仓库地址:repo1.maven.org/maven2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

查询顺序:本地仓库 --> 远程仓库--> 中央仓库

Maven常用的生命周期

  • clean:移除上一次构建生成的文件(clean与下列命令不在同一套生命周期)
  • compile:编译项目源代码
  • test:使用合适的单元测试框架运行测试(junit)
  • package:将编译后的文件打包,如:jar、war等
  • install:安装项目到本地仓库

测试

  • 测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
  • 阶段划分:单元测试、集成测试、系统测试、验收测试。
  • 测试方法:白盒测试、黑盒测试及灰盒测试。

JUnit单元测试

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

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

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

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

JUnit单元测试的命名规范

  • 类:XxxxTest(规范)
  • 方法:public void xxxx(){...}(规定)

AI可生成单元测试

JUnit常用注解

注解描述用途
@Test测试类中的方法用它修饰才能成为测试方法,才能启动执行单元测试
@ParameterizedTest参数化测试的注解(可以让单个测试运行多次,每次运行时仅参数不同)用了该注解,就不需要 @Test 注解了
@ValueSource参数化测试的参数来源,赋予测试方法参数与参数化测试注解配合使用
@DisplayName指定测试类、测试方法显示的名称(默认为类名、方法名)用于自定义测试名称

断言

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

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

JUnit实例

public class UserService {
    public UserService() {}
    public Integer getAge(String id) {
        if("110110200005050308".equals(id)){
            return 19;
        }else if("110110200005050328".equals(id)){
            return 24;
        }else if("110110200005050388".equals(id)){
            return 59;
        }
        return -1;
    }
    public String getGender(String id) {
        if("110110200005050308".equals(id)){
            return "男";
        }else if("110110200005050328".equals(id)){
            return "女";
        }else if("110110200005050388".equals(id)){
            return "男";
        }
        return "id不存在";
    }
}

@DisplayName("用户信息测试类")
public class UserService1Test {

   //修饰实例方法,每一个测试方法运行之前都会执行一次
    @BeforeEach
    public void beforeEach(){
        System.out.println("beforeEach....");
    }
    //修饰实例方法,每一个测试方法运行之后都会执行一次
    @AfterEach
    public void afterEach(){
        System.out.println("afterEach....");
    }
    //修饰静态方法,所有测试方法运行之前只执行一次
    @BeforeAll
    public static void beforeAll(){
        System.out.println("beforeAll....");
    }
    //修饰静态方法,所有测试方法运行之后只执行一次
    @AfterAll
    public static void afterAll(){
        System.out.println("afterAll....");
    }

    //定义一个测试方法
    @DisplayName("测试获取年龄1")
    @Test
    public void testGetAge(){
        UserService userService = new UserService();
        System.out.println(userService.getAge("110110200005050308"));
    }

    //定义一个测试方法 - 断言 --- 110110200005050308
    @DisplayName("测试获取年龄2")
    @Test
    public void testGetAge2(){
        UserService userService = new UserService();
        Assertions.assertEquals(24,userService.getAge("110110200005050308"),"测试失败");
    }

    //定义一个测试方法 - 断言 --- 110110200005050308
    @DisplayName("测试获取性别1")
    @Test
    public void testGetGender(){
        UserService userService = new UserService();
        Assertions.assertEquals("女",userService.getGender("110110200005050308"),"测试失败");
    }

    //参数化测试 --- 110110200005050308 110110200005050328 110110200005050388
    @DisplayName("测试获取性别2")
    @ParameterizedTest
    @ValueSource(strings = {"110110200005050308","110110200005050328","110110200005050388"})
    public void testAbc2(String idCard){
        UserService userService = new UserService();
        Assertions.assertEquals("女",userService.getGender(idCard),"测试失败");
    }
}

Maven常见问题

问题现象:Maven项目中添加的依赖,未正确下载,造成右侧Maven面板中的依赖报红,再次reload重新加载也不会再下载。

产生原因:由于网络原因,依赖没有下载完整导致的,在maven仓库中生成了xxx.lastUpdated文件,该文件不删除,不会再重新下载。

解决方法:在maven仓库中,通过依赖文件的坐标,找到对应的文件进行删除,回到项目重新加载即可。