取余运算边界值测试需覆盖除数为0、被除数为0或极值、正负号组合、除数为±1或等于被除数四类情况,严格依据语言规范验证异常与结果。

取余运算的边界值测试,核心是覆盖被除数、除数、符号组合和特殊值这四类情况,而不是只测几个常规数字。
除数为0必须单独验证
任何语言中除数为0都会抛异常(如 Java 的 ArithmeticException,Python 的 ZeroDivisionError),这是最优先要覆盖的边界。测试用例应明确断言异常类型和消息(若需要):
- 输入
10 % 0→ 期望抛出对应异常 - 输入
-5 % 0→ 同样必须抛异常,不能忽略负被除数 - 不要只测正数,0 本身作为除数是唯一非法值,必须显式触发并捕获
被除数为0和最小/最大值
0 对任何非零除数取余结果都是 0,容易被忽略但逻辑固定;而整型极值(如 Integer.MIN_VALUE)在某些语言中与 -1 取余可能溢出或有特殊行为:
-
0 % 7→ 期望结果为 0 -
0 % -3→ 仍为 0(符号不影响 0 的余数) -
Integer.MIN_VALUE % -1(Java)→ 实际结果是 0(不是溢出),需按语言规范验证 - 若用 long 或 int,检查
MAX_VALUE % 2、MIN_VALUE % 2是否符合预期符号规则
正负号组合要穷举四种情况
不同语言对负数取余的符号定义不同(Python 向下取整,Java 向零取整),必须按你所用语言的语义写用例:
-
7 % 3→ 1(正正) -
-7 % 3→ Java 是 -1,Python 是 2(关键差异点!) -
7 % -3→ Java 是 1,Python 是 -2 -
-7 % -3→ Java 是 -1,Python 是 -2 - 每个用例都要注释预期值来源(比如“依据 Java 语言规范 §15.17.3”)
除数绝对值为1和等于被除数
这两类输入结果确定且易错,常被漏测:
-
123 % 1→ 总是 0(任何整数对 1 取余为 0) -
-99 % 1→ 也是 0 -
42 % 42→ 0 -
-42 % 42→ Java 是 -0(即 0),但有些旧环境可能显示 -0,需确认是否归一化 -
42 % -42→ 同样应为 0
不复杂但容易忽略:边界不是“大数小数”,而是语义上让运算规则承压的位置——0、极值、符号切换、除数单位元。把语言规范里关于取余的定义逐条转化成断言,就踩准了重点。











