You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为无参void方法编写JUnit测试?以Car类集合操作为例

无参数Void方法的JUnit测试方案(针对Car类场景)

核心逻辑很直接:无参数的void方法虽然没有返回值,但一定会修改对象的内部状态(比如你提到的HashMap、ArrayList),测试的核心就是验证这个状态变化是否符合预期。下面结合你的Car类场景给出具体实现:

第一步:补全Car类的必要结构

你的Car类需要保留核心成员变量,同时给存储结果的集合加个getter方法,让测试能拿到内部数据:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Car {
    private Map<String, String> carMap;
    private ArrayList<String> carKeyList;

    public Car() {
        carMap = new HashMap<>();
        carKeyList = new ArrayList<>();
    }

    // 初始化HashMap的方法
    public void putCarText() {
        // 示例初始化逻辑,替换成你实际的代码即可
        carMap.put("bmw", "a cool car");
        carMap.put("toyota", "a family vehicle");
        carMap.put("benz", "luxury car");
        carMap.put("bike", "two wheel tool");
    }

    // 你要测试的无参数void方法:把值含"car"的键存入ArrayList
    public void countWordCar() {
        carKeyList.clear(); // 先清空避免残留数据
        for (Map.Entry<String, String> entry : carMap.entrySet()) {
            if (entry.getValue().contains("car")) {
                carKeyList.add(entry.getKey());
            }
        }
    }

    // 给测试用的getter方法
    public Map<String, String> getCarMap() {
        return carMap;
    }

    public ArrayList<String> getCarKeyList() {
        return carKeyList;
    }

    // 输出列表的方法,测试时无需重点验证,或仅做辅助查看
    public void printShowCarsInMap() {
        carKeyList.forEach(System.out::println);
    }
}

第二步:编写JUnit测试类

测试流程固定为:创建对象→初始化数据→执行目标方法→断言内部状态

import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import static org.junit.jupiter.api.Assertions.*;

public class CarTest {

    @Test
    void testCountWordCar() {
        // 1. 实例化Car对象
        Car car = new Car();

        // 2. 执行HashMap初始化方法,确保有测试数据
        car.putCarText();

        // 3. 调用要测试的无参数void方法
        car.countWordCar();

        // 4. 获取结果集合,验证内容是否符合预期
        ArrayList<String> resultList = car.getCarKeyList();

        // 断言集合大小
        assertEquals(2, resultList.size());
        // 断言具体元素存在
        assertTrue(resultList.contains("bmw"));
        assertTrue(resultList.contains("benz"));
        // 断言不符合条件的元素不存在
        assertFalse(resultList.contains("toyota"));
        assertFalse(resultList.contains("bike"));
    }
}

关键注意点

  • 无需Mockito:这里测试的是Car类自身的逻辑,直接操作真实对象、验证内部状态即可,不需要模拟依赖
  • 必须能访问内部集合:要么加getter,要么把集合设为包访问权限(测试类和Car类放同一包下),这是测试void方法的核心——验证方法执行后的副作用
  • 扩展测试场景:如果需要覆盖更多情况(比如空Map、全符合条件的键、全不符合条件的键),可以在测试里手动通过getCarMap().put(...)添加自定义测试数据,再执行countWordCar后断言结果

内容的提问来源于stack exchange,提问作者OnlyProblems

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:30:53