junit单元测试

48 阅读5分钟

一,单元测试

单元测试是针对最小的功能单元(方法)编写测试代码

  • 单元测试就是针对单个java方法的测试

单元测试的好处:

  1. 确保单个方法的运行正常
  2. 如果修改了方法代码,只需要确保其对应的单元测试通过。
  3. 测试代码本身就可以作为示例代码
  4. 可以自动化运行所有测试并获得报告。

三,JUnit单元测试框架

3.1 介绍

JUnit是一个开源的java语言的单元测试框架。

  • 专门针对java语言设置的,使用最广泛
  • JUnit是事实上的标准单元测试框架

特点:

  • 使用断言(Assertion)测试期望结果
  • 可以方便组织和运行测试
  • 可以方便查看测试结果
  • 常用IDE都集成了JUnit
  • 可以方便的集成到Maven中

JUnit的设计

  • TestCase:一个TestCase代表一个测试
  • TestSuite:一个TestSuite代表一组TestSuite,表示一组测试
  • TestFixture:一个TestFixture代表一个测试环境
  • TestResult:用于收集测试结果
  • TestRunner:用于运行测试
  • TestListener:用于监听测试过程,收集测试数据
  • Assert:用于断言测试是否正确

3.2 快速入门

使用步骤

  1. 定义一个测试类用来测试我们写的方法

    建议:测试类名写为被测试类名的Text并且单独创建一个包来存放这些测试类

    比如说我写了一个Calator类,那么我就单独创建一个Text包,在这个包中创建CalatorText

  2. 定义测试方法:这个测试方法可以独立运行

    建议:方法名:test测试的方法名,比如testAdd()

    返回值void,参数列表:空参

  3. 给方法加注解@Test

  4. 导入import org.junit.*;

举例:

  1. 在Calculator类中写了一个add方法

    public class Calculator {
        public int add(int a,int b){
            return a+b;
        }
    }
    
  2. 创建一个CalculatorTest类,并且创建对应的testAdd()方法

    package com.wdadwd.Demo;
    import org.junit.Test;
    public class CalculatorTest {
        @Test
        public void testAdd(){
            //1.创建计算机对象
            Calculator c=new Calculator();
            //2调用add方法
            int result=c.add(1,2);
            System.out.println(result);//这是在main方法中写的判断习惯,但是在单元测试中不这么写
    
        }
    }
    

3.3 断言

在main方法中我们都是使用System.out.println在方式输出在控制台来判断结果是否为理想结果的。

在单元测试中提供了断言,我断言这个结果为3,然后会把结果和我断言的结果判断,失败了就抛出异常,成功了就ok

所有的断言方法:

  • 验证值

    • assertEquals(expected, actual):验证两个值是否相等,如果不相等则抛出AssertionError异常。

    • assertNotEquals(expected, actual):验证两个值是否不相等,如果相等则抛出AssertionError异常。

  • 验证给定条件

    • assertTrue(condition):验证给定的条件是否为true,如果不是则抛出AssertionError异常。

    • assertFalse(condition):验证给定的条件是否为false,如果不是则抛出AssertionError异常。

  • 验证对象null

    • assertNull(object):验证给定对象是否为空(null),如果不为空则抛出AssertionError异常。

    • assertNotNull(object):验证给定对象是否不为空(null),如果为空则抛出AssertionError异常。

  • 验证数组

    • assertArrayEquals(expected, actual):验证两个数组是否相等,如果不相等则抛出AssertionError异常。
  • 验证对象

    • assertSame(expected, actual):验证两个对象是否相等,如果不相等则抛出AssertionError异常。

    • assertNotSame(notExpected, actual):验证两个对象是否不相等,如果相等则抛出AssertionError异常。

3.4 其他注解

  • @Test:这是JUnit最重要的注解之一,它被用来标记测试方法。JUnit会执行所有带有@Test注解的方法,以验证代码的正确性。

  • @Before:在每个测试方法执行之前该注解所标注的方法会被执行。通常,这个注解可以用于初始化测试数据和资源。

  • @After:在每个测试方法执行之后该注解所标注的方法会被执行。通常,这个注解可以用于清理测试数据和资源。

  • @BeforeClass在整个测试类中只执行一次,在执行测试用例之前该注解所标注的方法会被执行,且这个方法必须是静态方法,也就是这个方法会在类加载

    时执行。通常,这个注解可以用于初始化静态数据和资源。

  • @AfterClass在整个测试类中只执行一次,在执行测试用例之后该注解所标注的方法会被执行,同样,这个方法必须是静态方法。通常,这个注解可以用于清理静态数据和资源。

  • @Ignore:该注解表示忽略某个测试方法,不会执行该方法。通常,这个注解可以用于临时禁用某个测试用例


JUnit5新添加的注解:

  • @BeforeEach@AfterEach:用于在每个测试方法执行之前和之后执行一些准备和清理工作。
  • @BeforeAll@AfterAll注解用于在所有测试方法执行之前和之后执行一次性的准备和清理工作,必须是静态的方法才能被修饰。
  • @DisplayName(name)注解用于为测试类或测试方法指定自定义的显示名称,方便识别和理解测试结果。
  • @Disabled注解用于标识测试类或测试方法为禁用状态,即不会被执行。
  • @RepeatedTest(次数)注解用于重复执行相同的测试方法指定次数

@BeforeEach@AfterEach等于@Before和@After

@BeforeClass@AfterClass等于@BeforeAll@AfterAll

@Disabled等于@Ignore

这些方法就是JUnit5给他们改了个名字而已,具体作用是一样的。