Java 测试入门
Maria Milusheva
Senior Software Engineer
两个关键概念:
单元(Unit)——应用中最小的可测试部分,如方法
单元测试(Unit testing)——在与应用其他部分隔离的情况下,验证单个"单元"代码正确性的测试
要点:
单元测试关注小块逻辑,而非全局
其他测试类型关注全局(如集成测试)
JUnit 因主要用于单元测试而得名



assertTrue() 检查语句为 true: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // 无错误
assertFalse() 检查相反情况:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // 无错误
null 变量会导致 NullPointerException!
检查变量为/不为 null 的断言——assertNull() 与 assertNotNull()
常见用法:验证从外部获取的值不为 null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// 无错误
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
设想要验证抛出 ArrayIndexOutOfBoundsException:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit 提供多种方式实现!
JUnit 提供 assertThrows(),但需要使用高级 Java 语法(lambda 表达式)
可像这样使用 assertInstanceOf():
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// 传入期望的异常类和捕获到的异常
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
典型项目包含数百个单元测试
它们应轻量且易懂
使用信息量大的名称,便于一眼看出失败原因
例如:methodUnderTest_expectedBehavior_conditions()
Java 测试入门