using System.Text.Json;
using Dpz.Core.Public.ViewModel.Option;

namespace Dpz.Core.ServiceTest;

[TestFixture]
public class AppOptionServiceTest : Basic
{
    [Test]
    public async Task AddFriendTest()
    {
        var service = GetService<IAppOptionService>();

        var friend = new VmFriends()
        {
            Avatar = "https://localhost:37701/Home/Image/61f28989337b51b42fc24686",
            Description =
                "汤加洪阿哈阿帕伊火山喷发迄今已经过去了10多天。除了风云系列气象卫星,我国的多颗高分、海洋系列卫星也在持续获取遥感影像,可以看出汤加火山喷发带来的变化。洪阿哈阿帕伊岛位于汤加首都努库阿洛法以北约65公里处,火山喷发前由两个小岛与火山岩组成,而到了1月16日,原来连在一起的火山岛变成了两个小岛,中间的火山岩直接消失了,变成了水域。",
            Link = "https://localhost:37701/article/read/61f2898c337b51b42fc24696.html",
            Name = "中国卫星集体跟拍汤加火山现状",
        };
        await service.AddFriendAsync(friend);
    }

    [Test]
    public async Task GetFriendsTest()
    {
        var service = GetService<IAppOptionService>();
        var list = await service.GetFriendsAsync();

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

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

        list.ForEach(x => Console.WriteLine(JsonSerializer.Serialize(x)));
    }

    [Test]
    [TestCase("61f24eb63e68328408c1648c")]
    public async Task FindTest(string id)
    {
        var service = GetService<IAppOptionService>();
        var model = await service.FindAsync(id);

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

        Console.WriteLine(model);
    }

    [Test]
    [TestCase("61f25a09a87ec22504cd2906")]
    public async Task EditFriendsTest(string id)
    {
        var service = GetService<IAppOptionService>();
        var model = await service.FindAsync(id);

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

        if (model is VmFriends friend)
        {
            const string name = "Blazor WebAssembly站点   3";
            friend.Name = name;
            await service.EditFriendAsync(friend);

            var newModel = await service.FindAsync(id);

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

            var newFriend = newModel as VmFriends;

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

            Assert.That(name, Is.EqualTo(newFriend!.Name));
        }
    }

    [Test]
    [TestCase("footer123123")]
    public async Task SaveFooterTest(string content)
    {
        var service = GetService<IAppOptionService>();
        await service.SaveFooterContentAsync(content);

        var dbContent = await service.GetFooterContentAsync();

        Assert.That(content, Is.EqualTo(dbContent));
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个使用NUnit测试框架编写的单元测试类,用于测试IAppOptionService服务的各种功能。让我逐一解释每个测试方法:

类结构

[TestFixture]
public class AppOptionServiceTest : Basic
  • 继承自Basic基类(可能包含测试基础设施)
  • 使用[TestFixture]标记为测试类

测试方法详解

1. AddFriendTest - 添加朋友测试

[Test]
public async Task AddFriendTest()
  • 创建一个VmFriends对象,包含头像、描述、链接和名称
  • 测试添加朋友功能
  • 示例数据是关于汤加火山喷发的新闻内容

2. GetFriendsTest - 获取朋友列表测试

[Test]
public async Task GetFriendsTest()
  • 测试获取朋友列表功能
  • 验证返回的列表不为空且包含元素
  • 使用JsonSerializer.Serialize将结果输出到控制台

3. FindTest - 查找测试

[Test]
[TestCase("61f24eb63e68328408c1648c")]
public async Task FindTest(string id)
  • 使用[TestCase]提供测试参数
  • 通过ID查找特定项目
  • 验证返回结果不为空

4. EditFriendsTest - 编辑朋友信息测试

[Test]
[TestCase("61f25a09a87ec22504cd2906")]
public async Task EditFriendsTest(string id)
  • 先通过ID查找朋友信息
  • 修改朋友的名称为"Blazor WebAssembly站点 3"
  • 保存修改后重新查询验证修改是否成功
  • 使用断言确保名称修改正确

5. SaveFooterTest - 保存页脚内容测试

[Test]
[TestCase("footer123123")]
public async Task SaveFooterTest(string content)
  • 测试保存和获取页脚内容功能
  • 先保存指定内容,然后读取验证是否一致

关键特点

  1. 异步测试:所有测试方法都是异步的,使用async Task
  2. 参数化测试:使用[TestCase]提供测试数据
  3. 断言验证:使用NUnit的Assert.That进行结果验证
  4. 完整的CRUD操作:涵盖了创建、读取、更新等操作
  5. 数据序列化:使用System.Text.Json进行JSON序列化输出

这个测试类主要用于验证应用选项服务的朋友管理和页脚内容管理功能是否正常工作。

评论加载中...