# 文件存储测试 Mock 数据更新 **日期**: 2026-02-02 **类型**: 测试维护 **影响范围**: 单元测试 ## 背景 在完成 MinIO 到 boto3 S3 迁移后,单元测试中的 mock 数据仍使用旧的 MinIO 格式,需要更新以反映实际生产环境配置。 ## 变更内容 ### 更新的测试文件 **文件**: `server/tests/unit/test_file_storage_service.py` ### Mock 数据调整 #### 1. storage_provider 字段 ```python # 旧值 storage_provider="minio" # 新值 storage_provider="oss" ``` #### 2. file_url 格式 ```python # 旧格式(MinIO) file_url="http://localhost:6185/jointo/test/test.txt" # 新格式(阿里云 OSS) file_url="https://static.timelab.cn/test/test.txt" ``` #### 3. 预签名 URL 格式 ```python # 旧格式 expected_url = "http://localhost:6185/presigned-url" # 新格式 expected_url = "https://static.timelab.cn/test/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&..." ``` ### 涉及的测试用例 1. `test_upload_new_file` - 上传新文件 2. `test_upload_duplicate_file` - 上传重复文件(去重) 3. `test_get_presigned_url` - 生成预签名 URL 4. `test_increase_reference_count` - 增加引用计数 5. `test_decrease_reference_count_with_remaining_refs` - 减少引用计数(仍有引用) 6. `test_decrease_reference_count_to_zero` - 减少引用计数到 0 7. `test_cleanup_unused_files` - 清理无引用文件 8. `test_cleanup_with_deletion_error` - 清理时部分文件删除失败 ## 测试结果 ### 单元测试 ```bash 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),但会导致: 1. **文档价值降低** - 测试数据与实际环境不一致 2. **维护困惑** - 未来开发者可能误以为仍在使用 MinIO 3. **最佳实践** - 测试数据应尽可能反映真实场景 ### 为什么集成测试不需要调整? 集成测试的特点: - 使用真实的 `StorageService` 实例 - 从 `.env` 读取配置 - 返回的 `file_url` 自动使用 `S3_PUBLIC_URL` - 测试代码只验证逻辑,不验证具体值 ## 环境配置参考 当前生产环境配置(`.env`): ```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 ``` ## 相关文档 - [MinIO 到 boto3 S3 迁移](./2026-02-02-minio-to-boto3-s3-migration.md) - [文件存储服务文档合规修复](./2026-02-02-file-storage-service-doc-compliance-fix.md) - [移除 MinIO 容器](./2026-02-02-remove-minio-container.md) ## 影响评估 - ✅ 无破坏性变更 - ✅ 测试逻辑未改变 - ✅ 测试覆盖率保持不变 - ✅ 所有测试通过 ## 总结 成功将文件存储单元测试的 mock 数据从 MinIO 格式更新为阿里云 OSS 格式,确保测试数据与实际生产环境配置一致,提高了测试的文档价值和可维护性。