生成时间:2026-04-10 飞书原文:https://your-domain.feishu.cn/wiki/SNEgwMblLiFx7Skmv16cJVjcnYk 测试模式:mock-first
| 测试类 | 测试数 | 模式 | 覆盖目标 |
|---|---|---|---|
| SignSubmitServiceImplTest | 6 | mock-first | 签收提交主流程 + 幂等 |
| SignPhotoPresignServiceImplTest | 3 | mock-first | OSS预签名URL生成 |
| SignQueryServiceImplTest | 4 | mock-first | 签收记录查询 |
- 前置:carrier_sign_record 表为空
- 输入:
orderId=O001, signTime=1745000000, photoKeys=["k1.jpg"], courierId=C001 - Mock:
signRecordMapper.insert返回成功;mqProducer.send返回成功 - 预期:返回 signId 非空;
duplicate=false;mqProducer.send被调用 1 次
- 前置:carrier_sign_record 已有 orderId=O001 + signTime=1745000000 记录
- 输入:同 TC-01
- Mock:
signRecordMapper.insert抛出DuplicateKeyException;signRecordMapper.queryByOrderIdAndSignTime返回已有记录 - 预期:返回已有 signId;
duplicate=true;mqProducer.send不被调用
- 输入:
photoKeys包含 6 个元素 - 预期:抛出
BizException(BizErrorCode.PHOTO_COUNT_EXCEEDED)
- 输入:
photoKeys=["../hack.jpg"](非法路径) - 预期:抛出
BizException(BizErrorCode.INVALID_PHOTO_KEY)
- Mock:
mqProducer.send抛出MqSendException - 预期:签收记录已入库;异常被捕获记录告警日志;返回 signId(不抛出业务异常)
- 输入:
orderId=null - 预期:抛出
IllegalArgumentException或BizException(PARAM_INVALID)
- 输入:
orderId=O001, fileCount=3, fileType=jpg - Mock:
ossClient.generatePresignedUrl返回合法 URL - 预期:返回 3 个 uploadUrl;每个 URL 包含 orderId 路径前缀
- 输入:
fileCount=6 - 预期:抛出
BizException(PHOTO_COUNT_EXCEEDED)
- Mock:
ossClient.generatePresignedUrl抛出OSSException - 预期:包装为
BizException(OSS_PRESIGN_FAILED)抛出
- Mock:
signRecordMapper.queryByOrderId返回 1 条记录 - 预期:返回正确的 signId 和 photoUrls(URL 已经过签名转换)
- Mock:
signRecordMapper.queryByOrderId返回空列表 - 预期:返回空列表,不抛出异常
- 输入:
pageNo=0 - 预期:抛出
IllegalArgumentException
- Mock:记录中 photoKey 为 OSS key,
ossClient.generatePresignedUrl返回带签名 URL - 预期:返回的 photoUrls 均为带签名的访问 URL(非原始 key)