【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);
    }
}
  • 在测试方法之前执行的,常用来初始化资源
  • 在测试方法之后执行的,常用来释放资源
相关推荐
四谎真好看1 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
桦说编程1 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t1 小时前
ZIP工具类
java·zip
lang201509282 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
pengzhuofan3 小时前
第10章 Maven
java·maven
百锦再3 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
刘一说3 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多3 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring
百锦再4 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
DokiDoki之父4 小时前
Spring—注解开发
java·后端·spring