JUnit 单元测试~从入门到入坑。

JUnit 单元测试。



JUnit 是一个 Java 语言的单元测试框架。它由 Kent Beck 和 Erich Gamma 建立,逐渐成为源于 Kent Beck 的 sUnit 的 xUnit 家族中最为成功的一个。 JUnit 有它自己的 JUnit 扩展生态圈。多数 Java 的开发环境都已经集成了JUnit 作为单元测试的工具。
JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit 测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit 是一套框架,继承 TestCase 类,就可以用 Junit 进行自动测试了。


测试分类。

黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
白盒测试:需要写代码。关注程序具体的执行流程。—> JUnit。


原先测试步骤。

一般建议的测试项目结构。

在这里插入图片描述

package com.geek.junitDemo;

public class Calculator {

    /**
     * 加法。
     *
     * @param a
     * @param b
     * @return
     */
    public int add(int a, int b) {
        return a + b;
    }

    /**
     * 减法。
     *
     * @param a
     * @param b
     * @return
     */
    public int sub(int a, int b) {
        return a - b;
    }
}

在需要测试的类所在包下创建 ./test 包,创建 CalculatorTest.java。(需要测试的类 + Test.java)。

package com.geek.junitDemo.test;

import com.geek.junitDemo.Calculator;

public class CalculatorTest {

    public static void main(String[] args) {

        // 创建对象。
        Calculator calculator = new Calculator();
        // 调用。
        int result = calculator.add(1, 2);
        System.out.println("result = " + result);

        int subResult = calculator.sub(1, 1);
        System.out.println("subResult = " + subResult);
    }
}


存在的问题。

每个类需要独立运行,⇒ 一个 main()方法。


改进:使用 JUint

项目创建的建议。


测试类。

类名:被测试的类名 + Test。eg. CalculatorTest
包名:xxx.xxxx.test。eg. com.geek.test

测试方法。

方法名:test + 测试的方法名。eg. testAdd()。
返回值:void
参数列表:空参。

给方法加注解。

如果是第一次使用,本地可能没有依赖,IDEA 提供自动下载。(Maven Dependencies)

在这里插入图片描述

会自动加入到项目的 lib 目录下,并自动 Add Ad Library...

现在就可以使用了。

此时类声明处会出现绿色圈圈。点击 ta 可以运行测试。

在这里插入图片描述

如果测试运行成功,下面会变绿。

在这里插入图片描述

而测试失败则会变红警告。

在这里插入图片描述


断言。

一般如果测试结果为绿色也不一定说明测试结果是我们想要的。

比如,我要测试 1 + 1 是否为 2。但我调用了 sub()方法,结果为 0,不是我想要的结果,但是测试是已经通过了。

这里就需要使用断言

package com.geek.junitDemo.test;

import com.geek.junitDemo.Calculator;
import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void testAdd() {
        System.out.println("JUnit test running...");

        // 创建对象。
        Calculator calculator = new Calculator();
        // 调用。
        int result = calculator.sub(1, 2);
        System.out.println("result = " + result);

        // 断言。断言结果是 3。
        Assert.assertEquals(3, result);

    }
}

在这里插入图片描述


@Before & @After

如果测试方法较多,并且每个方法中有大量的重复代码,(如资源的申请,释放资源等。)
这时可以新创建两个方法,
一个用于定义执行该测试方法之前所需要执行的操作,(用 @Before 注解)。
一个用于定义执行该测试方法之后所需要执行的操作,(用 @After 注解)。

执行该测试方法前后,会自动调用这两种方法。
(并且在该类所有测试方法都生效)。

package com.geek.junitDemo.test;

import com.geek.junitDemo.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {

    @Before
    public void before() {
        System.out.println("before...");
    }

    @After
    public void after() {
        System.out.println("after...");
    }


    @Test
    public void testAdd() {
        System.out.println("JUnit test running...");
        System.out.println("testAdd()...");
        // 创建对象。
        Calculator calculator = new Calculator();
        // 调用。
        int result = calculator.add(1, 2);
        System.out.println("result = " + result);

        // 断言。断言结果是 3。
        Assert.assertEquals(3, result);

    }
}

在这里插入图片描述

发布了47 篇原创文章 · 获赞 1 · 访问量 1169

猜你喜欢

转载自blog.csdn.net/lyfGeek/article/details/104685088