一文详解Java单元测试Junit

文章目录

概述、Junit框架快速入门

单元测试概述

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

main方法测试的问题

  • 只能在main方法编写测试代码,去调用其他方法进行测试

  • 无法实现自动化测试,一个方法测试失败,可能影响其他方法的测试

  • 无法得到测试报告,需要程序员自己去观察测试是否成功

junit单元测试框架

  • 可以对方法进行测试,它是第三方公司开源出来的(IDEA工具以集成)

优点:

  • 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立

  • 不需要程序员分析测试的结果,会自动生成测试报告出来

  • 使用断言机制,通过预测程序的结果来判断程序是否出错

使用步骤:

  1. 将Junit框架的jar包导入项目中(IDEA已集成,不需要手动导入)

  2. 为需要测试的业务类,定义对应的测试类,并为每个业务方法,编写对应的测试方法(必须:公共,无参,无返回值)

  3. 测试方法上声明@Test注解,然后进行测试,测试方法建议使用test开头

使用案例

源码地址:Junit测试源码

包结构

步骤二:编写业务类

java 复制代码
//定义一个字符串工具类
public class StringUtil {

    public static void printNumber(String str){
    	if (str == null){
            System.out.println(0);
            return;
        }
        System.out.println("字符串的长度是:"+ str.length());
    }

    /**
     * 获取字符串的最大索引
     * @param str
     * @return
     */

    public static int getMaxIndex(String str){
        if(str == null){
            return -1;
        }
        return str.length();
    }

步骤三:为业务类生成测试类,测试类代码如下

java 复制代码
public class StringUtilTest {

    @Test   //爆红按Crtl+回车
    public void testPrintNumber(){
        StringUtil.printNumber("1234567890");
        StringUtil.printNumber(null);
    }

    @Test
    public void testGetMaxIndex(){
        System.out.println(StringUtil.getMaxIndex("12345"));
        System.out.println(StringUtil.getMaxIndex(null));
        System.out.println(StringUtil.getMaxIndex(""));

        Assert.assertEquals(StringUtil.getMaxIndex("12345"), 4);
    }

可以看到,我们方法的本意是想输出最大索引,但是如果我们使用系统输出很可能会检测不出来,但是我们用断言就可以检测出来,所以要去修改代码

Junit框架的常见注解

注解 说明
@Test 测试类中的方法必须由这个注解修饰才能成为测试方法
@Before 用来修饰一个实例方法,该方法会在每个测试方法执行之前执行一次
@After 用来修饰一个实例方法,该方法会在每个测试方法执行之后执行一次
@BeforeClass 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次
@AfterClass 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次
  • 在测试方法执行之前执行的方法常用于:初始化资源

  • 在测试方法执行完成之后执行的方法常用于:释放资源

测试

java 复制代码
    @Before
    public void testBefore(){
        System.out.println("实例方法:Before");
    }

    @After
    public void testAfter(){
        System.out.println("实例方法:After");
    }

    @BeforeClass
    public static void testBeforeClass(){
        System.out.println("实例方法:BeforeClass");
    }

    @AfterClass
    public static void testAfterClass(){
        System.out.println("实例方法:AfterClass");
    }


实例方法:BeforeClass
实例方法:Before
字符串的长度是:10
实例方法:After
实例方法:Before
最大索引为:4
实例方法:After
实例方法:AfterClass

测试完成

相关推荐
牢七14 小时前
mwf攻防。
java
不爱编程的小九九14 小时前
小九源码-springboot088-宾馆客房管理系统
java·开发语言·spring boot
Pluto_CSND15 小时前
Java实现gRPC双向流通信
java·开发语言·单元测试
songx_9915 小时前
idea建有servlet类的web项目
java·servlet·intellij-idea
武子康15 小时前
Java-154 深入浅出 MongoDB 用Java访问 MongoDB 数据库 从环境搭建到CRUD完整示例
java·数据库·分布式·sql·mongodb·性能优化·nosql
原来是猿16 小时前
谈谈环境变量
java·开发语言
oioihoii16 小时前
深入理解 C++ 现代类型推导:从 auto 到 decltype 与完美转发
java·开发语言·c++
韩立学长17 小时前
【开题答辩实录分享】以《租房小程序的设计和实现》为例进行答辩实录分享
java·spring boot·小程序
zl97989917 小时前
SpringBoot-数据访问之MyBatis与Redis
java·spring boot·spring
K_i13417 小时前
Tomcat核心原理与运维实战指南
java·运维·tomcat