Junit

发布时间 2023-09-09 11:49:22作者: SimpleWord
title: Junit单元测试
index_img: https://tuchuangs.com/imgs/2023/08/13/5f8b19db9c38698e.png
tags:
  - Java SE
categories:
  - Java SE
excerpt: Junit单元测试

单元测试

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

Junit的简单使用

  • 为需要测试的业务类定义对应的测试类
    • 每个业务方法,编写对应的测试方法(必须:公共public、无参无返回值void
    • 测试方法名推荐格式:test待测试方法名【首字母改为大写】
  • 测试方法上必须声明@Test注解
  • 然后在测试方法中,编写代码调用被测试的业务方法进行测试;
  • 如果测试通过则是绿色;如果测试失败,则是红色
  • IDEA中已经集成,可以单独运行一个测试方法,也可以运行所有

测试应该考虑极端情况

业务类

public class MyClass {
    public static void start() {
        System.out.println("开始计时");
    }

    public static int sum(int num) {
        int sum = 0;
        for (int i = 0; i <= num; i++) {
            sum += i;
        }
        return sum;
    }

    public int getLength(String s) { //这里并没有对s进行控制判断等,我们测试应该考虑空值的情况
        return s.length();
    }
}

测试类

public class MyClassTest {
    @Test
    public void testStart() {
        MyClass.start();
    }

    @Test
    public void testSum() {
        int sum = MyClass.sum(100);
        System.out.println(sum);
    }

    @Test
    public void testGetLength() {
        MyClass myClass = new MyClass();
        int length = myClass.getLength("12345");
        System.out.println(length);

        int length1 = myClass.getLength(null); //null测试
        System.out.println(length1);
    }
}

结果

  • 可以看到getLength空指针异常,接下来我们可以修改业务代码,增加null判断,再次测试即可

image-20230813195614302

Junit断言

问题描述

新增方法

     public static int getMaxIndex(String str) { //获取字符串所有长度
        if(str==null){
            return 0;
        }
        int indexLength = str.length(); //这里是有误的
        return indexLength;
    }

测试

    @Test
    public void testGetIndex() {
        System.out.println(MyClass.getMaxIndex(null));
        System.out.println(MyClass.getMaxIndex("01234"));
    }

测试结果

  • 虽然没有报错,但是结果是错误的,最大索引是4,但运行结果是5那怎么办?测不了吗?

image-20230813200907335

断言

期望值运行结果不一致就会错误

Assert.assertEquals(String 错误提示,期望值,运行值);

测试

    @Test
    public void testGetIndex() {
        int maxIndex = MyClass.getMaxIndex(null); //没处理的话,自己报空指针异常

        int maxIndex1 = MyClass.getMaxIndex("01234");
        Assert.assertEquals("有bug", 4, maxIndex1);
    }

结果

  • 修改业务方法后,再次测试即可

image-20230813201733063

Junit常用注解

junit4.*

注解 说明
@Test 测试类中的方法必须用它修饰才能成为测试方法,才能启动执行。
@Before 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。
@After 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。
@BeforeClass 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。
@AfterClass 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。

在测试方法执行执行的方法,常用于:初始化资源。【如Socket创建】

在测试方法执行完再执行的方法,常用于:释放资源。【如Socket关闭】

Junit改名而已

image-20230813202825315

public class MyClassTest {
    @BeforeClass
    public static void beforeClass() {
        System.out.println("执行@BeforeClass注解修饰的方法:在所有测试方法之前只执行一次");
    }

    @AfterClass
    public static void afterClass() {
        System.out.println("执行@AfterClass注解修饰的方法:在所有测试方法之后只执行一次");
    }

    @Before
    public void before() {
        System.out.println("执行@Before注解修饰的方法:在每一个测试方法执行之前执行一次");
    }

    @After
    public void after() {
        System.out.println("执行@After注解修饰的方法:在每一个测试方法执行之后执行一次");
    }

    @Test
    public void test1() {
        System.out.println("执行@Test注解修饰的方法:这是一个测试方法");
    }

    @Test
    public void test2() {
        System.out.println("执行@Test注解修饰的方法:这是另一个测试方法");
    }
}

image-20230813202651770

image-20230813202712936