Skip to content

JUnit单元测试详解:黑盒与白盒测试方法

Published:  at  03:27 AM

JUnit 单元测试

一、软件测试的基本分类

1. 黑盒测试(Black-box Testing)

在测试过程中,将程序视为一个不可打开的“黑盒”,不关注程序内部结构和实现细节,仅从外部接口出发进行测试。

黑盒测试的特点:


2. 白盒测试(White-box Testing)

白盒测试是一种基于程序内部结构的测试方法,测试人员清楚程序的内部逻辑和实现细节,并针对代码路径进行测试。

白盒测试的特点:

JUnit 主要用于白盒测试。


二、JUnit 单元测试概述

JUnit 是 Java 语言中最常用的 单元测试框架,主要用于:


三、JUnit 白盒测试的基本步骤

1. 定义测试类(Test Case)

例如:

测试类通常放在独立的测试包中,例如:com.boyuren.test


2. 定义测试方法(可独立运行)

测试方法的一般规范:


3. 引入 JUnit 依赖环境


4. 使用 @Test 注解标记测试方法

JUnit 会自动识别并执行被 @Test 注解标注的方法。


5. 结果判定(断言)

JUnit 通常使用 断言(Assert) 来判断实际结果是否符合预期。


四、示例:使用 JUnit 测试计算器类

1. 被测试类:Calculator

package com.boyuren.calculate;

/**
 * 计算器类
 */
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;
    }
}

2. 测试类:CalculatorTest

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * Calculator 的测试类
 */
public class CalculatorTest {

    /**
     * 在每个测试方法执行前都会调用
     */
    @Before
    public void init() {
        System.out.println("init...");
    }

    @Test
    public void testAdd() {
        // 创建对象
        Calculator calculator = new Calculator();
        // 调用被测试方法
        int result = calculator.add(1, 5);
        // 断言:期望值 vs 实际值
        Assert.assertEquals(6, result);
    }

    @Test
    public void testSub() {
        // 创建对象
        Calculator calculator = new Calculator();
        // 调用被测试方法
        int result = calculator.sub(1, 5);
        // 断言:期望值 vs 实际值
        Assert.assertEquals(-4, result);
    }

    /**
     * 在每个测试方法执行后都会调用
     */
    @After
    public void close() {
        System.out.println("close...");
    }
}

五、常用 JUnit 注解说明(JUnit 4)

注解作用
@Test标记测试方法
@Before每个测试方法执行前调用
@After每个测试方法执行后调用
@BeforeClass所有测试方法执行前调用(静态方法)
@AfterClass所有测试方法执行后调用(静态方法)

六、小结


Suggest Changes

Previous Post
Java反射机制详解及其应用
Next Post
深入了解Bootstrap框架及其响应式布局