JUnit单元测试

复制代码
测试是用来鉴定软件正确性、完整性、安全性以及软件质量的过程

测试阶段划分:
1.单元测试、2.集成测试、3.系统测试、4.验收测试;其中只有单元测试和集成测试需要开发人员关注

1.单元测试
对软件的基本组成单位进行测试,是最小的测试单位
目的是为了检测软件基本组成单位的正确性

2.集成测试
将已经通过测试的单元,按设计要求组合成系统或子系统,再进行测试
目的是为了检查单元之间的协作是否正确


测试方法:
    1.白盒测试:
    清楚软件的内部结构及代码逻辑,用于验证代码、逻辑的正确性
    2.黑盒测试:
    不清楚软件的内部结构及代码逻辑,只是用于验证软件的功能、兼容性
    3.灰盒测试:
    结合了白盒测试和黑盒测试的特点,既关注软件的内部结构又关注其功能实现
复制代码
Junit单元测试入门
Junit是最流行的Java测试框架之一,提供一些功能便于单元测试

为什么不使用main方法进行测试?
main方法的确可以用于测试,但是存在一些问题:
1.测试代码和源代码没有分开,难以维护
2.一个方法出现异常,程序直接停止,会影响后面的方法
3.无法自动化测试,得到测试报告

那么使用Junit的优势就是没有以上的问题

UserController

java 复制代码
package com.wzb.Controller;

/**
 * 用户相关方法
 *
 */
public class UserController {
    public String getGender(String id) {
        if (id.length() != 18) {
            throw new IllegalArgumentException("身份证错误");
        }
        int gender = id.charAt(16) - 48;
        if (gender % 2 == 0) {
            return "女";
        } else {
            return "男";
        }
    }
}

UserTest

java 复制代码
package com.wzb;

import com.sun.source.tree.AssertTree;
import com.wzb.Controller.UserController;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

/**
 * 使用Junit进行单元测试
 * 1.在pom.xml中引入Junit依赖
 * 2.在test/java的目录下创建测试类,并编写对应的测试方法,并且在方法上声明@Test注解
 */
public class UserTest {
    private final UserController userController = new UserController();


    @Test
    public void testGetGender() {
        String gender = userController.getGender("500104200410141611");
        // 加入assert断言,assert断言的参数都是(不)期望值在前,实际值在后,并且都可以提供报错信息提示
        // 判断两个值是否相等,不相等报错
        Assertions.assertEquals("男", gender); // 男,此处不报
        // 判断两个值是否不相等,相等报错
        Assertions.assertNotEquals("女", gender, "notEquals报错了"); // 男,此处不报
        // 判断实际值是否是null,不是null就报错
        Assertions.assertNull(gender, "null报错了"); // 男,此处报错
        // 判断实际值是否是null,是null就报错
        Assertions.assertNotNull(gender, "notNull报错了"); // 男,此处不报
        // 判断条件值是否为true,不是true就报错
        Assertions.assertTrue(gender.equals("男"), "true报错了"); // 男,此处不报
        // 判断条件之是否为false,不是false就报错
        Assertions.assertFalse(gender.equals("男"), "false报错了"); // 男,此处报错
        // 判断两个对象(引用)是否相等,不相等就报错
        Assertions.assertSame("男", gender, "same报错了"); // 男,此处不报错
    }


}
相关推荐
老马历写记1 天前
Maven POM 依赖管理总结
java·maven·system·pom·optional
AmyLin_20013 天前
AI 如何做出数学发现【5】- AI 数学证明怎样做单元测试:从“看起来顺”到可否证工作流
人工智能·单元测试·openai·数学推理·符号计算·ai推理·反例生成
是小艺吗。3 天前
第三方机构出具的软件功能测试报告的作用与流程说明,中承信安专业讲解
功能测试·单元测试·软件测试报告·软件功能测试·软件测评
测试老哥4 天前
软件测试:单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
sugar__salt4 天前
Spring、Spring Boot 与配置文件核心知识点详解
java·spring boot·后端·spring·java-ee·maven·intellij-idea
回眸&啤酒鸭5 天前
【回眸】搞钱灵感——智能体 汽车软件单元测试与集成测试
单元测试·汽车·集成测试
Architect_Lee6 天前
mac安装不同版本的maven
java·maven
BerryS3N6 天前
Java全平台开发环境配置与极速搭建指南(含JDK 8/17/21多版本管理、环境变量深层原理解析、Maven/Gradle构建工具及IDE集成)
java·ide·maven
sugar__salt6 天前
Spring 三层架构与 IoC、依赖注入完全指南
java·spring boot·后端·spring·架构·maven·intellij-idea