用途:该技能用于在 pytest 中有效测试领域层(domain layer)的纯业务逻辑。领域模型没有外部依赖,因此适合做彻底测试,目标是接近完美的覆盖率(95%–100%)。
适用时机:需要测试值对象、实体、领域逻辑,或希望达到 95% 领域覆盖率时使用。不适用于应用层(应使用 pytest-application-layer-testing)、适配器(应使用 pytest-adapter-integration-testing)或 mock 场景——领域测试应使用真实对象。
主要能力与用法:
- 值对象测试:验证创建、校验(如长度 1–500)、边界值(恰好 500 字符)、不可变性(frozen dataclass 赋值抛 AttributeError)、Unicode、空白处理、相等性、可哈希性与字符串表示。
- 实体测试:验证身份(相同 ID 视为相等)、业务逻辑(如 get_product_titles)、非法输入(空行项目、负数量、总价不匹配)。
- 领域异常测试:验证异常继承关系、消息匹配与通过基类捕获。
- 聚合不变量测试:至少一个行项目、总价为正、总价等于行项目之和、客户名非空。
- 领域服务测试:无状态计算,如 calculate_total、calculate_tax、apply_discount。
- 复杂值对象:Money 的加减乘、比较、拒绝负数。
- 参数化:用 @pytest.mark.parametrize 覆盖有效与无效用例。
限制:资料未提供安装命令、版本要求、收费信息或具体平台支持;示例代码中的部分实体(如 LineItem(...))为省略写法,需按实际项目补全。测试应避免 mock,直接实例化领域对象。