Junit单元测试入门

目录

一、单元测试

1.1 基本概念

1.2 以往测试存在的问题和不足

二、快速入门

2.1 基本步骤

2.2 基本使用示例(vscode为例)

2.2 断言机制(重要)

2.3 其它注解

三、注意事项


一、单元测试

1.1 基本概念

针对最小单元的测试,也就是对方法的测试

1.2 常规测试与单元测试的区别

①常规测试

在main方法中测试,每个类需要写一个main方法

main报错后,测试会在mian中中断,main中的其它方法后续无法运行正常的测试

main中测试结果需要自己观察,需要手动查看是哪个方法错误

②单元测试

单元测试不用使用main方法,一个类可以同时执行多个测试方法

单元测试不会中断,仅会显示每个方法通过与否

单元测试结果清晰,可直接找到对应的错误方法

二、快速入门

2.1 基本步骤

①将junit框架的jar包导入到项目

idea集成了junit框架,不需要手动导入,可在注解声明后直接面向报错信息导入

vscode可以直接在源代码操作中生成测试类,按照提示下载junit框架

②为需要测试的类定义对应的测试类,并为每个方法编写对应的测试方法

每个测试方法必须是:public、无参数、无返回值

③为测试方法声明@Test注解,然后编写代码进行测试

绿色表示没有检测到bug(不代表业务逻辑没问题,只是没有代码异常),红色表示代码异常

2.2 基本使用示例(vscode为例)

//这段代码是业务类,该方法存在bug,没有对字符串进行判空操作
package com.study;

public class stringUtil {

    public static void getLength(String str) {
        System.out.println(str.length());
    }
}
//这段代码是测试类,测试类stringUtilTest方法运行后会弹出错误
package com.study;

import org.junit.Test;

public class stringUtilTest {
    @Test
    public void testGetLength() {
        stringUtil.getLength(null);
        stringUtil.getLength("admin");
    }
}

2.2 断言机制(重要)

通过一个Assert方法来比对输入值的实际输出和期望输出从而达到对业务逻辑的bug测试

延续上述代码,加入一个获取最大索引方法:

//该部分为业务类
package com.study;

public class stringUtil {

    public static void getLength(String str) {
        System.out.println(str.length());
    }

    /*
     * @param String
     * 
     * @return int
     * 
     * @description
     * 该方法的业务逻辑是:该方法返回字符串的最大索引,如果字符串为空,则索引为-1,其余时候返回最大索引
     */
    public static int getMaxIndex(String str) {
        if (str == null) {
            return -1;
        }
        return str.length();
    }
}
//该部分为测试类
package com.study;

import org.junit.Assert;
import org.junit.Test;

public class stringUtilTest {
    @Test
    public void testGetLength() {
        stringUtil.getLength(null);
        stringUtil.getLength("admin");
    }

    @Test
    public void testGetMaxIndex() {
        stringUtil.getMaxIndex("admin");
        // 该测试用例的输入是admin字符串,最大索引期望值应为4,实际返回值为?
        Assert.assertEquals(4, stringUtil.getMaxIndex("admin"));
    }

}

2.3 其它注解

该图片节选自黑马程序员,适用于Junit4框架,目前已经有Junit5,部分注解已发生变化

三、注意事项

junit的单元测试只是最基础的单元测试方法,但在实际项目中,单元测试通常会调用多种接口,包括外系统、后台sql甚至是微服务等等,这个时候就需要使用Mock来模拟这些接口测试。

引入Mock方法的作用则是,通过Mock对象来直接运行某些方法,而忽略方法内部的调用,直接给出输入输出,就像黑盒测试一样,直观来说,就是用Mock跳过了某些“无法执行”的语句。

需要注意的是,使用更复杂的单元测试通常需要在测试类的顶上引用Runwith、Prepare等注解,建议不要使用Spring注解,否则会导致整体单元测试报错,因为Spring注解会调用集成测试,会导致服务冲突

这里给出进阶单元测试的文章,对Mock和插桩进行了说明,也给出了一些参考案例:

单元测试进阶-Mock使用和插桩-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值