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

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

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

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

  • 优点

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

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

2.快速入门

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

具体步骤

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

字符串工具类:

java 复制代码
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;

 }

测试类:

java 复制代码
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);
    }
}

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

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

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

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

测试类:

java 复制代码
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);
    }
}
  • 在测试方法之前执行的,常用来初始化资源
  • 在测试方法之后执行的,常用来释放资源
相关推荐
lybugproducer1 小时前
创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式
java·设计模式·建造者模式·简单工厂模式·工厂方法模式·抽象工厂模式·面向对象
南客先生1 小时前
马架构的Netty、MQTT、CoAP面试之旅
java·mqtt·面试·netty·coap
Minyy111 小时前
SpringBoot程序的创建以及特点,配置文件,LogBack记录日志,配置过滤器、拦截器、全局异常
xml·java·spring boot·后端·spring·mybatis·logback
百锦再1 小时前
Java与Kotlin在Android开发中的全面对比分析
android·java·google·kotlin·app·效率·趋势
武昌库里写JAVA2 小时前
39.剖析无处不在的数据结构
java·vue.js·spring boot·课程设计·宠物管理
Nelson_hehe4 小时前
Java基础第四章、面向对象
java·语法基础·面向对象程序设计
Thomas_YXQ4 小时前
Unity3D Lua集成技术指南
java·开发语言·驱动开发·junit·全文检索·lua·unity3d
ShiinaMashirol5 小时前
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
java·算法
东阳马生架构7 小时前
Nacos简介—3.Nacos的配置简介
java
北极的企鹅887 小时前
XML内容解析成实体类
xml·java·开发语言