• 【Java高级技术】单元测试——概述和快速入门


    单元测试——概述和Junit框架快速入门

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

    • 可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,比如IDEA)

    • 优点

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

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

    2.快速入门

    需求:某个系统有多个业务方法,请使用Junit单元测试框架,编写测试代码,完成正确性测试

    具体步骤

    • 因为IDEA已经集成了Junit,所以不需要手动导入
    • 为需要测试的业务类定义对应的测试类,并为每个业务方法编写测试方法(测试方法必须公共,无参,无返)
    • 测试方法上必须声明@Test注解,在测试方法中,调用被测试的业务方法
    • 开始测试:选中测试方法(附近位置)右键运行代码,如果通过控制台显示绿色,失败显示红色

    字符串工具类:

    public class StringUtil {
        //功能:打印字符串长度
        public static void printNumber(String name){
            //发现错误,加入判断
            if(name == null){
                System.out.println(0);
                return;
            }
            System.out.println("名字长度是:" + name.length());
        }
        //功能:求字符串最大索引
        public static int getMaxIndex(String data){
            if(data == null){
                return -1;
            }
            //return data.length(); //这里逻辑有问题!但是没有出现异常
            return data.length() - 1;
    
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    测试类:

    public class StringUtilTest {
        
        @Test
        public void testPrintNumber(){
            //在测试方法中,调用被测试的方法即可
            StringUtil.printNumber("admin"); //名字长度是:5
            StringUtil.printNumber(null);
        }
        @Test
        public void testGetMaxIndex(){
            System.out.println(StringUtil.getMaxIndex(null)); //-1
            int index = StringUtil.getMaxIndex("admin");
            Assert.assertEquals("逻辑错误", 4 ,index);
            System.out.println(index);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试方法必须公共、无参、无返

    断言机制:程序编写者可以预测程序运行的结果,使用Assert类的静态方法assertEquals

    public static void assertEquals(String 错误提示, long 预期值, long 实际值);

    3.Junit单元测试框架的常用注解(Junit 4.xxxx版本)
    注解说明
    @Test测试类中的方法必须用它修饰才能成为测试方法,才能启动执行
    @Before用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次
    @After用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次
    @BeforeClass用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次
    @AfterClass用来修饰一个静态方法,还方法会在所有测试方法之后只执行一次

    测试类:

    public class StringUtilTest {
    
        @BeforeClass
        public static void beforeClass(){
            System.out.println("-------- beforeClass修饰static方法,会在所有测试方法之前,执行一次 --------");
        }
    
        @AfterClass
        public static void afterClass(){
            System.out.println("-------- afterClass修饰static方法,会在所有测试方法之后,执行一次 --------");
        }
    
        @Before //初始化数据
        public void before(){
            System.out.println("-------- before修饰实例方法,会在每一个测试方法之前,执行一次 --------");
        }
    
        @After //释放资源
        public void after(){
            System.out.println("-------- after修饰实例方法,会在每一个测试方法之后,执行一次 --------");
        }
    
        @Test
        public void TestPrintNumber() {
            StringUtil.printNumber("admin");
        }
    
        @Test
        public void TestGetMaxIndex() {
            int index1 = StringUtil.getMaxIndex(null);
            System.out.println(index1);
    
            int index2 = StringUtil.getMaxIndex("admin");
            System.out.println(index2);
            Assert.assertEquals("方法有逻辑错误", 4, index2);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 在测试方法之前执行的,常用来初始化资源
    • 在测试方法之后执行的,常用来释放资源
  • 相关阅读:
    财务指标初步学习笔记
    虚拟机的生命周期
    跟 AI 学 StarRocks:简介
    使用 Abp.Zero 搭建第三方登录模块(一):原理篇
    Python学习笔记--模块简介
    警惕!出现这些表现,你的亲人/朋友正在认真考虑自杀
    Day 57 django 路由系统 反向解析
    《机器学习》阅读笔记系列一
    制造业企业如何高效进行生产计划排单?
    【数据结构】线段树
  • 原文地址:https://blog.csdn.net/m0_65462447/article/details/133528438