You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.4 KiB
4.4 KiB
文件存储测试 Mock 数据更新
日期: 2026-02-02
类型: 测试维护
影响范围: 单元测试
背景
在完成 MinIO 到 boto3 S3 迁移后,单元测试中的 mock 数据仍使用旧的 MinIO 格式,需要更新以反映实际生产环境配置。
变更内容
更新的测试文件
文件: server/tests/unit/test_file_storage_service.py
Mock 数据调整
1. storage_provider 字段
# 旧值
storage_provider="minio"
# 新值
storage_provider="oss"
2. file_url 格式
# 旧格式(MinIO)
file_url="http://localhost:6185/jointo/test/test.txt"
# 新格式(阿里云 OSS)
file_url="https://static.timelab.cn/test/test.txt"
3. 预签名 URL 格式
# 旧格式
expected_url = "http://localhost:6185/presigned-url"
# 新格式
expected_url = "https://static.timelab.cn/test/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&..."
涉及的测试用例
test_upload_new_file- 上传新文件test_upload_duplicate_file- 上传重复文件(去重)test_get_presigned_url- 生成预签名 URLtest_increase_reference_count- 增加引用计数test_decrease_reference_count_with_remaining_refs- 减少引用计数(仍有引用)test_decrease_reference_count_to_zero- 减少引用计数到 0test_cleanup_unused_files- 清理无引用文件test_cleanup_with_deletion_error- 清理时部分文件删除失败
测试结果
单元测试
docker exec jointo-server-app pytest tests/unit/test_file_storage_service.py -v
结果: ✅ 11/11 通过
tests/unit/test_file_storage_service.py::TestCalculateChecksum::test_calculate_checksum PASSED
tests/unit/test_file_storage_service.py::TestCalculateChecksum::test_calculate_checksum_empty_file PASSED
tests/unit/test_file_storage_service.py::TestUploadFile::test_upload_new_file PASSED
tests/unit/test_file_storage_service.py::TestUploadFile::test_upload_duplicate_file PASSED
tests/unit/test_file_storage_service.py::TestUploadFile::test_upload_file_storage_error PASSED
tests/unit/test_file_storage_service.py::TestGetPresignedUrl::test_get_presigned_url PASSED
tests/unit/test_file_storage_service.py::TestReferenceCount::test_increase_reference_count PASSED
tests/unit/test_file_storage_service.py::TestReferenceCount::test_decrease_reference_count_with_remaining_refs PASSED
tests/unit/test_file_storage_service.py::TestReferenceCount::test_decrease_reference_count_to_zero PASSED
tests/unit/test_file_storage_service.py::TestCleanupUnusedFiles::test_cleanup_unused_files PASSED
tests/unit/test_file_storage_service.py::TestCleanupUnusedFiles::test_cleanup_with_deletion_error PASSED
集成测试
状态: 无需调整
集成测试不使用硬编码的 mock 数据,而是:
- 实际调用 API 获取响应
- 验证字段存在性和逻辑正确性
- 自动适配当前环境配置(
.env中的 S3 配置)
技术细节
为什么单元测试需要调整?
单元测试使用 mock 对象模拟依赖,mock 数据中的 storage_provider 和 file_url 是硬编码的。虽然不影响测试通过(因为是 mock),但会导致:
- 文档价值降低 - 测试数据与实际环境不一致
- 维护困惑 - 未来开发者可能误以为仍在使用 MinIO
- 最佳实践 - 测试数据应尽可能反映真实场景
为什么集成测试不需要调整?
集成测试的特点:
- 使用真实的
StorageService实例 - 从
.env读取配置 - 返回的
file_url自动使用S3_PUBLIC_URL - 测试代码只验证逻辑,不验证具体值
环境配置参考
当前生产环境配置(.env):
STORAGE_PROVIDER=oss
S3_ENDPOINT_URL=https://oss-cn-beijing.aliyuncs.com
S3_BUCKET_NAME=jointo
S3_REGION=oss-cn-beijing
S3_PUBLIC_URL=https://static.timelab.cn
相关文档
影响评估
- ✅ 无破坏性变更
- ✅ 测试逻辑未改变
- ✅ 测试覆盖率保持不变
- ✅ 所有测试通过
总结
成功将文件存储单元测试的 mock 数据从 MinIO 格式更新为阿里云 OSS 格式,确保测试数据与实际生产环境配置一致,提高了测试的文档价值和可维护性。