java基础之测试类

Junit单元测试

测试可以分为两类:一类是黑盒测试,一类是白盒测试。

  1. 黑盒测试:不需要写代码,不关注内部的流程(盒子相对于测试人员来说是黑的,看不到内部的结构),只需要给输入值,看程序是否可以给出期望的输出结果
  2. 白盒测试:需要写代码,同时需要关注内部的流程(盒子相对于测试人员来说是白的,是可以看到的,我们也需要关注内部的流程)。

而Junit属于白盒测试

步骤

  1. 定义一个测试类

    建议:

    • 测试类名:被测试的类名Test CalculatorTest
    • 包名:xx.xx.xx.test cn.itcast.test
  2. 定义测试方法:可以独立运行

    建议:

    • 方法名:test测试的方法名 testAdd()
    • 返回值:void
    • 参数列表:空参
  3. 给方法加 @Test

  4. 导入Junit依赖环境

判定结果

  • 红色:失败
  • 绿色:成功

我们一般使用Assert类下的静态方法assertEquals(expected, actual)去处理我们的期望结果和输出结果

Assert.assertEquals(3, result);

两个参数分别是:期望值 程序结果值

为什么要使用Assert.assertEquals(expected, actual)去处理测试结果呢?

因为我们规定红色代表失败,绿色代表正确。当我们使用一个测试方法去测试一个计算机的加法方法时,最后只是输出这个结果(假如没有异常的发生)。如果我们输入1和3,我们期望得到结果4,但是我们输出的是2,我们期望得到的是4,这个时候得到的结果不符合我们的预期,但是运行结果仍然是绿色的(代表正确),是不是就不太正确,这个时候我们可以在最后使用Assert的assertEquals方法比较预期值和程序输出的结果值,如果相等,就会使绿色的,不相等就是红色的。这个时候是不是就符合我们对绿色和红色的定义了。

package cn.itcast.test;

import cn.itcast.junit.Calculator;
import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {
    /**
     * 测试add方法
     */
    @Test
    public void testAdd(){
        Calculator  c = new Calculator();
        int a = 1, b = 2;
        int result = c.add(1, 2);
        Assert.assertEquals(3, result);
    }

    /**
     * 测试sub方法
     */
    @Test
    public void testSub(){
        Calculator  c = new Calculator();
        int a = 1, b = 2;
        int result = c.sub(1, 2);
        Assert.assertEquals(-1, 2);
    }
}

使用测试类的好处:

下面是摘自知乎的一段话

我们在写程序的过程中,免不了要对一段代码进行测试。这个时候比较懒的做法就是新建一个类(一个类只能有一个主方法,程序运行的入口),让这段代码在这个类的主方法中运行,但是测试完之后还得删除,比较麻烦。但是测试类呢,可以定义多种方法,每一个方法都可以看做是程序的入口,这样一个测试类就可以有多个独立运行的”主方法“了,虽然并不是真正的主方法,但是可以这样来用。每个测试类有多个可以运行的main方法了,每个测试方法都可以单独运行,具体运行哪个方法由自己来指定,方便测试且整洁。

两个注解

  • @Before

在一个测试方法之前加上@Before它就成为了初始化方法,在所有测试方法执行之前都会自动先执行该方法,一般用于资源的申请

  • @After

在一个测试方法之前加上@After它就成为了释放资源方法,在所有测试方法执行之后都会自动执行该方法。

被@Before修饰的方法会在测试方法执行之前先被执行

被@After修饰的方法会在测试方法执行之后被执行

被@Before或被@After修饰的方法无论测试方法是否出一场都会执行

你可能感兴趣的:(java高级特性,java)