Java Junit 单元测试


Junit

  • Junit 是 Java 语言编写的第三方单元测试框架(工具类);
  • 类库 ==> 类 junit.jar;

1. 单元测试

  • 单元:在 Java 中,一个类、一个方法就是一个单元;
  • 单元测试:程序员编写的一小段代码,用来对某个类中的某个方法进行功能测试或业务逻辑测试;

a. Junit 单元测试框架的作用

  • 用来对类中的方法功能进行有目的的测试,以保证程序的正确性和稳定性;
  • 能够让方法独立运行起来;

b. Junit 单元测试框架的使用步骤

  • 编写业务类,在业务类中编写业务方法。比如增删改查的方法;
  • 编写测试类,在测试类中编写测试方法,在测试方法中编写测试代码来测试;
    • 测试类的命名规范:以 Test 开头,以业务类类名结尾,使用驼峰命名法:
      • 每一个单词首字母大写,称为大驼峰命名法,比如类名,接口名…;
      • 从第二单词开始首字母大写,称为小驼峰命名法,比如方法命名;
      • 比如业务类类名:ProductDao,那么测试类类名就应该叫:TestProductDao;
    • 测试方法的命名规则:以 test 开头,以业务方法名结尾:
      • 比如业务方法名为:save,那么测试方法名就应该叫:testSave;

2. 测试方法

a. 测试方法注意事项

  • 必须是 public 修饰的,没有返回值,没有参数;
  • 必须使用 JUnit 的注解 @Test 修饰;

b. 如何运行测试方法

  • 选中方法名 >> 右键 >> Run ‘测试方法名’ 运行选中的测试方法;
  • 选中测试类类名 >> 右键 >> Run ‘测试类类名’ 运行测试类中所有测试方法;
  • 选中模块名 >> 右键 >> Run ‘All Tests’ 运行模块中的所有测试类的所有测试方法;

c. 如何查看测试结果

  • 绿色:表示测试通过;
  • 黄色:表示断言错误,测试程序有问题;
  • 红色:表示测试失败,被测试的代码有问题;

3. Junit 常用注解

a. Junit 4.x 版本

  • @Before:用来修饰方法,该方法会在每一个测试方法执行之前执行一次;
  • @After:用来修饰方法,该方法会在每一个测试方法执行之后执行一次;
  • @BeforeClass:用来静态修饰方法,该方法会在所有测试方法之前执行一次,而且只执行一次;
  • @AfterClass:用来静态修饰方法,该方法会在所有测试方法之后执行一次,而且只执行一次;

b. Junit 5.x 版本

  • @BeforeEach:用来修饰方法,该方法会在每一个测试方法执行之前执行一次;
  • @AfterEach:用来修饰方法,该方法会在每一个测试方法执行之后执行一次;
  • @BeforeAll:用来静态修饰方法,该方法会在所有测试方法之前执行一次;
  • @AfterAll:用来静态修饰方法,该方法会在所有测试方法之后执行一次;

4. JUnit 4.x 示例代码

a. 业务类

/**
 * 业务类:实现加减乘除运算
 */
public class Calculate {
    /*
     业务方法1:求a和b之和
     */
    public int sum(int a, int b) {
        return a + b + 10;
    }

    /*
     业务方法2:求a和b之差
     */
    public int sub(int a, int b) {
        return a - b;
    }
}

b. 测试类

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class TestCalculate {

    static Calculate c = null;

    @BeforeClass // 用来静态修饰方法,该方法会在所有测试方法之前执行一次。
    public static void init(){
        System.out.println("初始化操作");
        // 创建Cacluate对象
        c = new Calculate();
    }

    @AfterClass // 用来静态修饰方法,该方法会在所有测试方法之后执行一次。
    public static void close(){
        System.out.println("释放资源");
        c = null;
    }

   /* @Before // 用来修饰方法,该方法会在每一个测试方法执行之前执行一次。
    public void init(){
        System.out.println("初始化操作");
        // 创建Cacluate对象
        c = new Cacluate();
    }

    @After // 用来修饰方法,该方法会在每一个测试方法执行之后执行一次。
    public void close(){
        System.out.println("释放资源");
        c = null;
    }*/

    @Test
    public void testSum(){
        int result = c.sum(1,1);
        /*
            断言:预习判断某个条件一定成立,如果条件不成立,则直接奔溃。
            assertEquals方法的参数
            (String message, double expected, double actual)
            message: 消息字符串
            expected: 期望值
            actual: 实际值
         */
        // 如果期望值和实际值一致,则什么也不发生,否则会直接奔溃。
        Assert.assertEquals("期望值和实际值不一致",12,result);
        System.out.println(result);
    }

    @Test
    public void testSub(){
        // 创建Cacluate对象
        // Cacluate c = new Cacluate();

        int result = c.sub(1,1);
        // 如果期望值和实际值一致,则什么也不发生,否则会直接奔溃。
        Assert.assertEquals("期望值和实际值不一致",0,result);
        System.out.println(result);
    }
}

Junit 的测试方法只能用 void 修饰。

c. 测试结果

在这里插入图片描述

发布了317 篇原创文章 · 获赞 322 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览