首页/开发/代码质量与评审速查/SOLID 落地:用契约视角核对子类
设计原则与模式62 条

SOLID 落地:用契约视角核对子类

给子类做契约审查:列举基类的可见承诺(入参范围、返回值范围、异常、副作用),逐条对照子类实现;拿不准的用基类引用编写集成测试,统一套跑所有子类。

审查对象前置条件 / 后置条件 / 不变量 / 副作用
手段基类测试套件参数化跑全部子类
结论无法满足契约 → 改用组合

参数化契约测试

参数化契约测试
static Stream<Shape> shapes() {
    return Stream.of(new Rect(2, 3), new Square(2));
}

@ParameterizedTest
@MethodSource("shapes")
void areaIsPositive(Shape s) {
    assertTrue(s.area().isPositive());
}

易错点

  • 契约只靠注释:无测试兜底,子类悄悄违约
  • 子类测试各写各的:替换安全性没有统一证据

数据来源与参考

  • Liskov & Wing(1994)行为子类型理论与工程化契约测试实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌