6.0 KiB
6.0 KiB
AssetLike Repository 测试和依赖修复总结
📊 测试结果
✅ 所有测试通过!
测试统计:
- 总测试数: 28 个
- 通过: 28 ✅
- 失败: 0 ❌
- 总耗时: ~2.4 秒
测试分类
AssetLike Repository 测试 (8 个)
- ✅ TestAssetLikeRepository_Create - 创建点赞记录
- ✅ TestAssetLikeRepository_Delete - 删除点赞记录
- ✅ TestAssetLikeRepository_Exists - 检查点赞存在性
- ✅ TestAssetLikeRepository_GetByAsset - 按资产查询点赞列表
- ✅ TestAssetLikeRepository_GetByUser - 按用户查询点赞列表
- ✅ TestAssetLikeRepository_CountByAsset - 统计资产点赞数
- ✅ TestAssetLikeRepository_CountByUser - 统计用户点赞数
- ✅ TestAssetLikeRepository_LikeUnlikeFlow - 完整点赞流程
AssetRepository 测试 (10 个)
- ✅ TestAssetRepository_Create
- ✅ TestAssetRepository_GetByID
- ✅ TestAssetRepository_GetByIDAndOwner
- ✅ TestAssetRepository_GetByOwner
- ✅ TestAssetRepository_CountByOwner
- ✅ TestAssetRepository_UpdateStatus
- ✅ TestAssetRepository_UpdateBlockchainInfo
- ✅ TestAssetRepository_IncrementLikeCount
- ✅ TestAssetRepository_DecrementLikeCount
- ✅ TestAssetRepository_LikeCount
MintOrderRepository 测试 (10 个)
- ✅ TestMintOrderRepository_Create
- ✅ TestMintOrderRepository_GetByOrderID
- ✅ TestMintOrderRepository_GetByOrderIDAndUser
- ✅ TestMintOrderRepository_UpdateStatus
- ✅ TestMintOrderRepository_UpdateAssetID
- ✅ TestMintOrderRepository_UpdateError
- ✅ TestMintOrderRepository_UpdateMintedAt
- ✅ TestMintOrderRepository_IncrementRetryCount
- ✅ TestMintOrderRepository_BasicOperations
- ✅ TestMintOrderRepository_CompleteFlow
🔧 修复的问题
问题 1: 测试数据外键约束错误
错误:
ERROR: insert or update on table "assets" violates foreign key constraint
原因: 测试中使用了不存在的用户 ID(硬编码为 1),导致外键约束失败。
修复:
// 修复前
asset := createTestAsset(t, db, 1, star.StarID, "测试资产")
// 修复后
assetOwner := createTestUser(t, db, "19900200004")
createTestFanProfile(t, db, assetOwner.ID, star.StarID, "资产所有者")
asset := createTestAsset(t, db, assetOwner.ID, star.StarID, "测试资产")
问题 2: 粉丝档案昵称重复
错误:
ERROR: duplicate key value violates unique constraint "uk_fan_profiles_star_nickname"
原因: 在同一个明星下创建多个粉丝档案时使用了相同的昵称 "用户",违反了唯一约束。
修复:
// 修复前
createTestFanProfile(t, db, user.ID, star.StarID, "用户")
// 修复后
createTestFanProfile(t, db, user.ID, star.StarID, fmt.Sprintf("用户%d", i))
同时添加了 fmt 包的导入:
import (
"fmt"
"testing"
// ...
)
问题 3: 测试数据清理不完整
修复:
在 cleanupTestDB 函数中添加了对 test_like_% 前缀的清理:
// 清理测试明星(包括 test_asset_%, test_mint_%, test_like_%)
db.Exec("DELETE FROM stars WHERE identity_id LIKE 'test_asset_%' OR identity_id LIKE 'test_mint_%' OR identity_id LIKE 'test_like_%'")
📝 修改的文件
services/assetService/repository/asset_like_repository_test.go
修改内容:
- 添加
fmt包导入 - 修复
TestAssetLikeRepository_GetByAsset:- 创建资产所有者用户
- 使用唯一昵称(用户1, 用户2, ...)
- 修复
TestAssetLikeRepository_CountByAsset:- 创建资产所有者用户
- 使用唯一昵称
🎯 当前状态
✅ 已完成
- Asset Service Repository 层完全实现并测试通过
- AssetLike Repository 完全实现并测试通过
- Social Service 资产点赞功能实现(Service 层和 Provider 层)
- Asset RPC 客户端实现
⚠️ 待解决的依赖问题
Social Service 编译错误:
client/asset_client.go:15:17: undefined: assetPb.AssetServiceClient
client/asset_client.go:23:72: undefined: assetPb.AssetServiceClientImpl
原因: Asset Service 的 proto 文件中还没有定义点赞相关的 RPC 接口。
需要在 proto/asset.proto 中添加:
service AssetService {
// ... 现有方法 ...
// 点赞相关
rpc LikeAsset(LikeAssetRequest) returns (LikeAssetResponse);
rpc UnlikeAsset(UnlikeAssetRequest) returns (UnlikeAssetResponse);
rpc CheckAssetLike(CheckAssetLikeRequest) returns (CheckAssetLikeResponse);
rpc GetAssetLikes(GetAssetLikesRequest) returns (GetAssetLikesResponse);
}
以及对应的 message 定义。
🚀 运行测试
运行所有 Repository 测试
cd services/assetService
go test ./repository/... -v
只运行 AssetLike 测试
cd services/assetService
go test ./repository/... -run TestAssetLike -v
测试结果
PASS
ok github.com/topfans/backend/services/assetService/repository 2.352s
📊 测试覆盖率
AssetLike Repository
- ✅ 创建点赞(含重复检测)
- ✅ 删除点赞
- ✅ 检查点赞存在性
- ✅ 分页查询(按资产、按用户)
- ✅ 统计功能(按资产、按用户)
- ✅ 完整流程(点赞 → 取消点赞)
数据一致性
- ✅ 外键约束正确
- ✅ 唯一约束正确
- ✅ 测试数据隔离
- ✅ 自动清理测试数据
📌 下一步
-
完善 Asset Service proto 定义:
- 添加点赞相关的 RPC 接口定义
- 添加对应的 Request/Response message
- 重新编译 proto 文件
-
实现 Asset Service Provider 层:
- 实现 LikeAsset RPC 接口
- 实现 UnlikeAsset RPC 接口
- 实现 CheckAssetLike RPC 接口
- 实现 GetAssetLikes RPC 接口
-
实现 Asset Service Service 层:
- 调用 AssetLikeRepository
- 调用 AssetRepository(更新点赞数)
- 事务处理
-
集成测试:
- 测试 Social Service → Asset Service 的 RPC 调用
- 测试完整的点赞流程
测试完成时间: 2026-01-12 14:07 总测试数: 28 个 通过率: 100%