using System.Linq;
using System.Text.Json;
using Dpz.Core.EnumLibrary;
using Dpz.Core.Public.ViewModel;

namespace Dpz.Core.ServiceTest;

[TestFixture]
public class CommentServiceTest : Basic
{
    [Test]
    public async Task InsertCommentAsync()
    {
        ICommentService service = GetService<ICommentService>();
        for (var i = 0; i < 30; i++)
        {
            var vm = new VmPublishComment
            {
                CommentText = $"这个评论\r\n\r\n{Guid.NewGuid()}",
                Email = "pengqian089@foxmail.com",
                NickName = "风敛",
                Node = CommentNode.Article,
                Relation = "61be591da417ba2111512e0b",
                Site = "",
            };
            await service.PublishCommentAsync(vm);
            await Task.Delay(500);
        }
    }

    [Test]
    [TestCase("620fc1b5eb4a99143fe87ea5")]
    public async Task InsertReplyComment(string replyId)
    {
        ICommentService service = GetService<ICommentService>();
        for (var i = 0; i < 2; i++)
        {
            var vm = new VmPublishComment
            {
                CommentText = $"这个回复\r\n\r\n{Guid.NewGuid()}",
                Email = "pengqian089@yeah.net",
                NickName = "被打断的狗腿",
                Node = CommentNode.Article,
                Relation = "61be591da417ba2111512e0b",
                Site = "",
                ReplyId = replyId,
            };
            await service.PublishCommentAsync(vm);
        }
    }

    [Test]
    public async Task GetCommentsTest()
    {
        ICommentService service = GetService<ICommentService>();
        var list = await service.GetCommentsAsync(
            CommentNode.Article,
            "61be591da417ba2111512e0b",
            1,
            5
        );

        Assert.That(list, Is.Not.Null);

        Assert.That(list.Count(), Is.GreaterThan(0));

        var json = JsonSerializer.Serialize(list);
        Console.WriteLine(json);
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于测试评论服务(ICommentService)的单元测试类。让我详细解释一下这个代码:

类结构

[TestFixture]
public class CommentServiceTest : Basic
  • 使用NUnit测试框架的[TestFixture]属性标记测试类
  • 继承自Basic类,可能包含了测试的基础配置和依赖注入相关方法

测试方法详解

1. InsertCommentAsync() - 批量插入评论测试

[Test]
public async Task InsertCommentAsync()
  • 目的:测试发布评论功能
  • 逻辑
    • 循环30次创建评论
    • 每个评论包含随机GUID的文本内容
    • 设置固定的邮箱、昵称等信息
    • 评论类型为文章评论(CommentNode.Article)
    • 关联到特定文章ID("61be591da417ba2111512e0b")
    • 每次发布后延迟500ms,可能是为了避免频率限制

2. InsertReplyComment() - 回复评论测试

[Test]
[TestCase("620fc1b5eb4a99143fe87ea5")]
public async Task InsertReplyComment(string replyId)
  • 目的:测试回复特定评论的功能
  • 特点
    • 使用[TestCase]属性提供测试参数
    • 创建2条回复评论
    • 通过ReplyId字段指定要回复的评论ID
    • 使用不同的用户信息(邮箱、昵称)

3. GetCommentsTest() - 获取评论列表测试

[Test]
public async Task GetCommentsTest()
  • 目的:测试获取评论列表功能
  • 验证逻辑
    • 获取指定文章的评论(第1页,每页5条)
    • 断言结果不为空
    • 断言评论数量大于0
    • 将结果序列化为JSON并输出到控制台

关键组件

VmPublishComment 视图模型

包含以下字段:

  • CommentText: 评论内容
  • Email: 用户邮箱
  • NickName: 用户昵称
  • Node: 评论节点类型(文章、页面等)
  • Relation: 关联的内容ID
  • Site: 网站信息
  • ReplyId: 回复的评论ID(可选)

CommentNode 枚举

  • CommentNode.Article: 表示文章评论类型

测试特点

  1. 异步测试:所有测试方法都是异步的,使用async/await
  2. 集成测试:通过依赖注入获取真实的服务实例
  3. 数据驱动:使用[TestCase]提供测试数据
  4. 断言验证:使用NUnit的Assert进行结果验证
  5. 调试友好:输出JSON结果便于调试

这个测试类主要验证了评论系统的核心功能:发布评论、回复评论和获取评论列表。

评论加载中...