using System.Collections.Generic;
using System.Net.Http;
using MongoDB.Bson.Serialization.Attributes;
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();
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);
}
public class MusicTest : BaseEntity
{
/// <summary>
/// 音乐Url
/// </summary>
public string? MusicUrl { get; set; }
/// <summary>
/// 歌词Url
/// </summary>
public string? LyricUrl { get; set; }
/// <summary>
/// 音乐源文件名
/// </summary>
public string? FileName { get; set; }
/// <summary>
/// 音乐标题
/// </summary>
public string? Title { get; set; }
/// <summary>
/// 音乐时长
/// </summary>
public TimeSpan Duration { get; set; }
/// <summary>
/// 音乐大小
/// </summary>
public long MusicLength { get; set; }
/// <summary>
/// 艺术家
/// </summary>
public string? Artist { get; set; }
/// <summary>
/// 上传时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime UploadTime { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime LastUpdateTime { get; set; }
/// <summary>
/// 封面ID
/// </summary>
public string? CoverUrl { get; set; }
/// <summary>
/// 来源
/// </summary>
public string? From { get; set; }
/// <summary>
/// 分组
/// </summary>
public List<string>? Group { get; set; }
}
[Test]
public async Task GetMusicsAsyncTest()
{
var repository = new Repository<MusicTest>(ConnectionString, nameof(Music));
var list = await repository.SearchFor(x => true).ToListAsync();
Assert.That(list, Is.Not.Null);
Assert.That(list, Is.Not.Empty);
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
上述代码是一个单元测试类 MusicServiceTest,用于测试与音乐相关的服务。它包含两个主要的测试方法:CleanDataAsyncTest 和 GetMusicsAsyncTest。以下是对这两个方法及其相关代码的详细解释:
1. CleanDataAsyncTest 方法
这个方法的主要功能是清理和更新音乐数据,特别是从指定的歌词 URL 获取歌词内容并将其存储在音乐对象中。具体步骤如下:
获取音乐数据:通过
Repository<Music>类从数据库中检索所有音乐记录。SearchFor(x => true)表示获取所有记录。创建 HTTP 客户端:使用
HttpClient创建一个新的 HTTP 客户端实例,用于发送 HTTP 请求。遍历音乐列表:对每个音乐项进行遍历:
- 如果
LyricUrl为空,则跳过该项。 - 发送 GET 请求到
LyricUrl。 - 如果响应状态不是成功,则跳过该项。
- 如果成功,读取响应内容并将其存储在
LyricContent属性中。 - 将更新后的音乐项添加到
updatedMusics列表中。
- 如果
更新数据库:最后,调用
repository.UpdateAsync(updatedMusics)方法将更新后的音乐列表保存回数据库。
2. GetMusicsAsyncTest 方法
这个方法的功能是测试从数据库中获取音乐记录的能力。具体步骤如下:
获取音乐数据:通过
Repository<MusicTest>类从数据库中检索所有音乐记录。这里使用了nameof(Music)作为集合名称。断言检查:
- 使用
Assert.IsNotNull(list)确保获取的列表不为 null。 - 使用
Assert.IsNotEmpty(list)确保列表中至少有一个音乐记录。
- 使用
3. MusicTest 类
这是一个模型类,表示音乐对象的结构。它包含多个属性,描述音乐的各个方面,例如:
MusicUrl:音乐的 URL。LyricUrl:歌词的 URL。FileName:音乐源文件名。Title:音乐标题。Duration:音乐时长。MusicLength:音乐文件的大小。Artist:艺术家名称。UploadTime和LastUpdateTime:上传和最后修改的时间。CoverUrl:封面图片的 URL。From:音乐的来源。Group:音乐的分组。
总结
整体来看,这段代码的目的是测试音乐服务的功能,包括从数据库中获取音乐记录和更新歌词内容。通过使用 HTTP 请求获取歌词并更新数据库,确保音乐数据的完整性和准确性。
评论加载中...