3. 测试布尔判断函数的真值表覆盖

测试布尔判断函数的真值表覆盖 学习卡片

闰年判断函数的条件结构

闰年判断是典型的布尔逻辑函数,其规则为:能被4整除但不能被100整除,或者能被400整除。该函数包含三个条件分支,适合用真值表方法系统化设计测试用例。

闰年判断函数条件分支与真值表覆盖 isLeapYear(year) 条件结构 条件A:year % 4 === 0 条件B:year % 100 !== 0 条件C:year % 400 === 0 返回:(A && B) || C 条件组合真值表 A B C 结果 代表年份 T T F 闰年 2024 T F F 平年 1900 T F T 闰年 2000 测试用例设计:覆盖所有条件分支 用例1:普通闰年 输入:2024 期望:true 用例2:世纪平年 输入:1900 期望:false 用例3:世纪闰年 输入:2000 期望:true 用例4:普通平年 输入:2023 期望:false 分支覆盖: A&&B 为真 ✓ A&&B 为假且C为假 ✓ C 为真 ✓ 边界覆盖: 被4整除 ✓ 被100整除 ✓ 被400整除 ✓ 不被4整除 ✓

真值表驱动的测试用例设计

根据条件组合,四个测试用例即可覆盖所有分支路径。每个用例对应真值表中一行,确保 (A && B) || C 的每个子表达式都被独立验证。

测试代码实现

// leapYear.js
function isLeapYear(year) {
  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
module.exports = isLeapYear;

// leapYear.test.js
const isLeapYear = require('./leapYear');

describe('isLeapYear 真值表覆盖', () => {
  // 用例1:A=T, B=T, C=F → 普通闰年
  test('2024 是闰年(被4整除且不被100整除)', () => {
    expect(isLeapYear(2024)).toBe(true);
  });

  // 用例2:A=T, B=F, C=F → 世纪平年
  test('1900 不是闰年(被100整除但不被400整除)', () => {
    expect(isLeapYear(1900)).toBe(false);
  });

  // 用例3:A=T, B=F, C=T → 世纪闰年
  test('2000 是闰年(被400整除)', () => {
    expect(isLeapYear(2000)).toBe(true);
  });

  // 用例4:A=F → 普通平年
  test('2023 不是闰年(不被4整除)', () => {
    expect(isLeapYear(2023)).toBe(false);
  });
});
覆盖验证要点:运行测试后,检查每个 test 是否独立通过。若用例2失败,说明 year % 100 !== 0 条件未被正确排除;若用例3失败,说明 || year % 400 === 0 分支未生效。四个用例全部通过即表示真值表所有行均被覆盖。

边界值补充

真值表覆盖了逻辑分支,但整除边界还需额外验证:year = 4(最小闰年)、year = 100(最小世纪平年)、year = 400(最小世纪闰年)。这些值验证取模运算在边界处的正确性,与真值表用例互补。