void 關鍵字表示方法無返回值。調用 void 方法必須作為獨立語句,以分號結尾:
public static void printGrade(double score) {
if (score >= 90) System.out.println('A');
else if (score >= 80) System.out.println('B');
// ...
}
// 調用
printGrade(78.5); // 輸出 C
業務邏輯中大量 save*、update* 等 void 方法,無返回值驗證,需通過以下方式測試:
@Override
public void updateRuleName(Long ruleId, String newRuleName, Long ucId) {
Assert.notNull(ruleId, "規則ID不能為Null");
Assert.notNull(newRuleName, "規則名稱不能為Null");
Assert.notNull(ucId, "操作人UCID不能為Null");
String cleanName = StringUtils.trim(newRuleName);
if (StringUtils.isBlank(cleanName)) throw new IllegalArgumentException("新規則名稱不能為空");
Rule rule = queryRuleById(ruleId);
if (rule == null) throw new IllegalDataException("未查到該規則");
rule.setRuleName(cleanName);
rule.setUpdateUcid(ucId);
rule.setUpdateTime(new Date());
ruleDao.updateSelective(rule);
}
@Test
public void testUpdateRuleName() {
Long ruleId = 1L, ucId = 123L;
String newRuleName = "newRuleName";
List rules = new ArrayList<>();
Rule rule = new Rule();
rule.setRuleStatus((byte) 1);
rules.add(rule);
// Stub 查詢
Map params = new HashMap<>();
params.put("ruleId", ruleId);
Mockito.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules);
// 捕獲 updateSelective 參數進行斷言
Mockito.doAnswer(new Answer
doAnswer + Answer 接口實現攔截器模式ruleDao.updateSelective(rule) → Mockito 攔截器 → 靜態代理 → Answer.answer() → 獲取 InvocationOnMock 參數 → 斷言Mockito.doThrow() 模擬