网页后端开发(基础2--maven单元测试)

发布于:2025-06-16 ⋅ 阅读:(21) ⋅ 点赞:(0)

测试

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

测试的阶段:

单元测试,集成测试,系统测试,验收测试。

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

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

                测试人员:开发人员

                测试的方法:白盒测试

集成测试:将已通过单元测试的单元,按设计要求组合成系统或子系统,在进行测试。

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

                测试人员:开发人员

                测试的方法:灰盒测试

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

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

                测试人员:测试人员

                测试的方法:黑盒测试

验收测试:交付测试,针对用户需求,对业务流程进行正式的测试。

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

                测试人员:客户/需求方

                测试的方法:黑盒测试

测试的方法:白盒测试,黑盒测试,灰盒测试

白盒测试:清楚软件内部结构,代码逻辑。用于验证代码,逻辑的正确性。

黑盒测试:不清楚软件内部结构,代码逻辑。用于验证软件的功能,兼容性等方面。

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

入门

main方法测试:

1.测试代码与源码不分离,难以维护。

2.一个方法测试失败,影响后面方法。

3.无法自动化测试,得到测试报告。

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

JUnit:最流行的Java测试框架之一,提供一些固定功能,方便程序进行单元测试

JUnit方法测试:

1.测试代码与源码分离,利于维护。

2.一个方法测试失败,不影响后面方法。

3.可根据需要进行自动化测试。

4.可自动分析测试结果,产出测试报告。

JUnit使用方法

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

<!--junit依赖-->
        <!-- JUnit Jupiter API -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- JUnit Jupiter Engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- JUnit Platform Launcher -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- JUnit Jupiter Params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

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

注:JUnit单元测试类名命名规范为:XxxxxTest。

JUnit单元测试方法,必须声明为public void xxx{}。

 

注:运行测试单元,测试通过为:绿色,测试失败为:红色。 

断言

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

Assertions.assertEquals(object exp,Object act)检查两个值是否相等,不相等就报错。
Assertions.assertNotEquals(object unexp,Object act)检查两个值是否不相等,相等就报错
Assertions.assertNuli(object act)检查对象是否为null,不为null,就报错。
Assertions.assertNotNul(object act)检查对象是否不为null,为null,就报错。
Assertions.assertTrue(boolean condition)检查条件是否为true,不为true,就报错
Assertions.assertFalse(boolean condition)检查条件是否为false,不为false,就报错。
Assertions.assertThrows(class expType,Executable exec)检查两个对象引用是否相等,不相等,就报错。

package com.itheima;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest; // 添加此行导入
import org.junit.jupiter.params.provider.ValueSource;

public class UserServiceTest {

    //UserService 计算年龄
    @Test
    public void testGetAge() {
        UserService userService = new UserService();
        Integer age = userService.getAge("610125190511117117");
        System.out.println(age);
    }

    //计算性别
    @Test
    public void testGetGender() {
        UserService userService = new UserService();
        String gender = userService.getGender("610125190511117117");
        System.out.println(gender);
    }

    //断言
    @Test
    public void testGenderWithAssert() {
        System.out.println("断言gender是男");
        UserService userService = new UserService();
        String gender = userService.getGender("610125190511117117");
        Assertions.assertEquals("男",gender);
    }

    //断言
    @Test
    public void testGenderWithAssert2() {
        System.out.println("断言gender类型");
        UserService userService = new UserService();
        Assertions.assertThrows(IllegalArgumentException.class,()->{//期望异常
            userService.getGender(null);//实际异常

        });
    }
}

运行结果 :

总结:

在JUnit单元测试中,断言的作用:
    单元测试方法运行不报错,不代表业务方法没问题。
    通过断言可以检测方法运行结果是否和预期一致,从而判断业务方法的正确性

    使用方法:Assertions.assert****()

常见注解

常见注解:

@Test测试类中的方法用它修饰才能成为测试方法,才能启动执行
@ParmeterizedTest 参数化测试的注解(可以让单个测试运行多次,每次运行时仅参数不同)用了该注解,就不需要@Test注解了

@DValueSource参数化测试的参数来源,赋予测试方法参数 ,与参数化测试注解配合使用
@DisplayName 指定测试类、测试方法显示的名称 (默认为类名、方法名)


@BeforeEach用来修饰一个实例方法,该方法会在每一个测试方法执行之执行一次,初始化资源(准备工作)
@AfterEach用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次,释放资源(清理工作)
@BeforeAll用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次,初始化资源(准备工作)
@AfterAll用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次,释放资源(清理工作)

注:
1.JUnit单元测试的方法,是否可以声明方法形参?        

        可以的,参数化测试
        @ParameterizedTest + @ValueSource
2。如何实现在单元测试方法运行之前,做一些初始化操作

        @BeforeEach、@BeforeAll
3,如何实现在单元测试方法运行之后,释放对应的资源?

        @AfterEach、@AfterAll

参数化测试:@ParmeterizedTest

依赖范围<scope>....</scope> 

在maven项目中,test目录存放单元测试的代码,是否可以在main目录中编写单元测试呢?
可以,但是不规范

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

作用范围:

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

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

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

<!--junit依赖-->
        <!-- JUnit Jupiter API -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

<scope>test</scope> 

scope的值为test,测试程序范围有效。


网站公告

今日签到

点亮在社区的每一天
去签到