网站首页 网站源码
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.IsNotNull(list);
Assert.IsNotEmpty(list);
}
}
上述代码是一个单元测试类 MusicServiceTest
,用于测试与音乐相关的服务。它包含两个主要的测试方法:CleanDataAsyncTest
和 GetMusicsAsyncTest
。以下是对这两个方法及其相关代码的详细解释:
CleanDataAsyncTest
方法这个方法的主要功能是清理和更新音乐数据,特别是从指定的歌词 URL 获取歌词内容并将其存储在音乐对象中。具体步骤如下:
获取音乐数据:通过 Repository<Music>
类从数据库中检索所有音乐记录。SearchFor(x => true)
表示获取所有记录。
创建 HTTP 客户端:使用 HttpClient
创建一个新的 HTTP 客户端实例,用于发送 HTTP 请求。
遍历音乐列表:对每个音乐项进行遍历:
LyricUrl
为空,则跳过该项。LyricUrl
。LyricContent
属性中。updatedMusics
列表中。更新数据库:最后,调用 repository.UpdateAsync(updatedMusics)
方法将更新后的音乐列表保存回数据库。
GetMusicsAsyncTest
方法这个方法的功能是测试从数据库中获取音乐记录的能力。具体步骤如下:
获取音乐数据:通过 Repository<MusicTest>
类从数据库中检索所有音乐记录。这里使用了 nameof(Music)
作为集合名称。
断言检查:
Assert.IsNotNull(list)
确保获取的列表不为 null。Assert.IsNotEmpty(list)
确保列表中至少有一个音乐记录。MusicTest
类这是一个模型类,表示音乐对象的结构。它包含多个属性,描述音乐的各个方面,例如:
MusicUrl
:音乐的 URL。LyricUrl
:歌词的 URL。FileName
:音乐源文件名。Title
:音乐标题。Duration
:音乐时长。MusicLength
:音乐文件的大小。Artist
:艺术家名称。UploadTime
和 LastUpdateTime
:上传和最后修改的时间。CoverUrl
:封面图片的 URL。From
:音乐的来源。Group
:音乐的分组。整体来看,这段代码的目的是测试音乐服务的功能,包括从数据库中获取音乐记录和更新歌词内容。通过使用 HTTP 请求获取歌词并更新数据库,确保音乐数据的完整性和准确性。