topfans/backend/docs/测试和依赖修复总结.md
2026-04-07 22:29:48 +08:00

6.0 KiB
Raw Blame History

AssetLike Repository 测试和依赖修复总结

📊 测试结果

所有测试通过!

测试统计:

  • 总测试数: 28 个
  • 通过: 28
  • 失败: 0
  • 总耗时: ~2.4 秒

测试分类

AssetLike Repository 测试 (8 个)

  1. TestAssetLikeRepository_Create - 创建点赞记录
  2. TestAssetLikeRepository_Delete - 删除点赞记录
  3. TestAssetLikeRepository_Exists - 检查点赞存在性
  4. TestAssetLikeRepository_GetByAsset - 按资产查询点赞列表
  5. TestAssetLikeRepository_GetByUser - 按用户查询点赞列表
  6. TestAssetLikeRepository_CountByAsset - 统计资产点赞数
  7. TestAssetLikeRepository_CountByUser - 统计用户点赞数
  8. TestAssetLikeRepository_LikeUnlikeFlow - 完整点赞流程

AssetRepository 测试 (10 个)

  1. TestAssetRepository_Create
  2. TestAssetRepository_GetByID
  3. TestAssetRepository_GetByIDAndOwner
  4. TestAssetRepository_GetByOwner
  5. TestAssetRepository_CountByOwner
  6. TestAssetRepository_UpdateStatus
  7. TestAssetRepository_UpdateBlockchainInfo
  8. TestAssetRepository_IncrementLikeCount
  9. TestAssetRepository_DecrementLikeCount
  10. TestAssetRepository_LikeCount

MintOrderRepository 测试 (10 个)

  1. TestMintOrderRepository_Create
  2. TestMintOrderRepository_GetByOrderID
  3. TestMintOrderRepository_GetByOrderIDAndUser
  4. TestMintOrderRepository_UpdateStatus
  5. TestMintOrderRepository_UpdateAssetID
  6. TestMintOrderRepository_UpdateError
  7. TestMintOrderRepository_UpdateMintedAt
  8. TestMintOrderRepository_IncrementRetryCount
  9. TestMintOrderRepository_BasicOperations
  10. 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

修改内容:

  1. 添加 fmt 包导入
  2. 修复 TestAssetLikeRepository_GetByAsset:
    • 创建资产所有者用户
    • 使用唯一昵称用户1, 用户2, ...
  3. 修复 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

  • 创建点赞(含重复检测)
  • 删除点赞
  • 检查点赞存在性
  • 分页查询(按资产、按用户)
  • 统计功能(按资产、按用户)
  • 完整流程(点赞 → 取消点赞)

数据一致性

  • 外键约束正确
  • 唯一约束正确
  • 测试数据隔离
  • 自动清理测试数据

📌 下一步

  1. 完善 Asset Service proto 定义:

    • 添加点赞相关的 RPC 接口定义
    • 添加对应的 Request/Response message
    • 重新编译 proto 文件
  2. 实现 Asset Service Provider 层:

    • 实现 LikeAsset RPC 接口
    • 实现 UnlikeAsset RPC 接口
    • 实现 CheckAssetLike RPC 接口
    • 实现 GetAssetLikes RPC 接口
  3. 实现 Asset Service Service 层:

    • 调用 AssetLikeRepository
    • 调用 AssetRepository更新点赞数
    • 事务处理
  4. 集成测试:

    • 测试 Social Service → Asset Service 的 RPC 调用
    • 测试完整的点赞流程

测试完成时间: 2026-01-12 14:07 总测试数: 28 个 通过率: 100%