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

测试完成

相关推荐
Magnum Lehar2 分钟前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
就叫飞六吧15 分钟前
Spring Security 集成指南:避免 CORS 跨域问题
java·后端·spring
Mcworld85716 分钟前
java集合
java·开发语言·windows
天黑请闭眼22 分钟前
IDEA:程序编译报错:java: Compilation failed: internal java compiler error
java·intellij-idea
苍煜1 小时前
Maven构建流程详解:如何正确管理微服务间的依赖关系-当依赖的模块更新后,我应该如何重新构建主项目
java·微服务·maven
冼紫菜1 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
isyangli_blog2 小时前
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
java·开发语言
秋野酱3 小时前
Spring Boot 项目的计算机专业论文参考文献
java·spring boot·后端
士别三日&&当刮目相看3 小时前
数据结构*优先级队列(堆)
java·数据结构
香饽饽~、3 小时前
【第二篇】 初步解析Spring Boot
java·spring boot·后端