一文详解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

测试完成

相关推荐
小灰灰__12 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭16 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
程序媛小果36 分钟前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
追风林41 分钟前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨1 小时前
El表达式和JSTL
java·el
duration~2 小时前
Maven随笔
java·maven
zmgst2 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD2 小时前
前后端分离,Jackson,Long精度丢失
java
blammmp2 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式