using System.Collections.Generic;
using System.Net.Http;
using MongoDB.Driver.Linq;

namespace Dpz.Core.ServiceTest;

[TestFixture]
public class MusicServiceTest : Basic
{
    [Test]
    public async Task CleanDataAsyncTest()
    {
        var repository = new Repository<Music>(ConnectionString);
        var list = await repository.SearchFor(x => true).ToListAsync();

        // ReSharper disable once ShortLivedHttpClient
        var client = new HttpClient();

        var updatedMusics = new List<Music>();
        foreach (var item in list)
        {
            if (string.IsNullOrEmpty(item.LyricUrl))
            {
                continue;
            }

            var request = new HttpRequestMessage(HttpMethod.Get, item.LyricUrl);
            var response = await client.SendAsync(request);

            if (!response.IsSuccessStatusCode)
            {
                continue;
            }

            var lyricContent = await response.Content.ReadAsStringAsync();
            item.LyricContent = lyricContent;
            updatedMusics.Add(item);
        }

        await repository.UpdateAsync(updatedMusics);
    }

    [Test]
    public async Task GetMusicsAsyncTest()
    {
        var repository = new Repository<Music>(ConnectionString);
        var list = await repository.SearchFor(x => true).ToListAsync();

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

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

这是一个使用NUnit测试框架编写的音乐服务测试类,主要用于测试MongoDB数据库中音乐数据的操作。让我详细解释一下代码结构和功能:

类结构

[TestFixture]
public class MusicServiceTest : Basic
  • [TestFixture]:NUnit测试框架的特性,标识这是一个测试类
  • 继承自Basic类,可能包含了一些基础配置(如数据库连接字符串)

测试方法1:CleanDataAsyncTest

这个测试方法的主要功能是清理和更新音乐数据,具体流程如下:

数据获取

var repository = new Repository<Music>(ConnectionString);
var list = await repository.SearchFor(x => true).ToListAsync();
  • 创建音乐数据的仓储对象
  • 查询所有音乐记录(x => true表示无条件查询)

HTTP客户端处理

var client = new HttpClient();
var updatedMusics = new List<Music>();
  • 创建HTTP客户端用于网络请求
  • 创建用于存储更新后音乐数据的集合

歌词内容获取和更新

foreach (var item in list)
{
    if (string.IsNullOrEmpty(item.LyricUrl))
    {
        continue; // 跳过没有歌词URL的音乐
    }

    var request = new HttpRequestMessage(HttpMethod.Get, item.LyricUrl);
    var response = await client.SendAsync(request);

    if (!response.IsSuccessStatusCode)
    {
        continue; // 跳过请求失败的情况
    }

    var lyricContent = await response.Content.ReadAsStringAsync();
    item.LyricContent = lyricContent; // 更新歌词内容
    updatedMusics.Add(item);
}

批量更新数据库

await repository.UpdateAsync(updatedMusics);

测试方法2:GetMusicsAsyncTest

这是一个基础的数据查询测试

var repository = new Repository<Music>(ConnectionString);
var list = await repository.SearchFor(x => true).ToListAsync();

Assert.That(list, Is.Not.Null);    // 验证结果不为空
Assert.That(list, Is.Not.Empty);   // 验证结果不是空集合

代码特点和注意事项

  1. 异步编程:所有数据库和网络操作都使用了async/await模式
  2. MongoDB集成:使用了MongoDB.Driver.Linq进行数据查询
  3. HTTP请求:通过HttpClient获取外部歌词内容
  4. 错误处理:对无效URL和请求失败进行了适当的跳过处理
  5. 批量更新:收集所有需要更新的记录后进行批量更新,提高效率

这个测试类主要用于验证音乐数据的基本CRUD操作,特别是从外部源获取歌词内容并更新到数据库的功能。

评论加载中...