如何为无参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
相关产品推荐
相关产品推荐

