using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using Dpz.Core.Service.RepositoryService;
using Dpz.Core.Service.RepositoryServiceImpl;
using Microsoft.Extensions.Logging;
using Moq;
using NUnit.Framework;
namespace Dpz.Core.ServiceTest;
[TestFixture]
public class SteamGameTest : Basic
{
private readonly HttpClient _httpClient = new()
{
BaseAddress = new Uri("https://api.steampowered.com"),
};
[Test]
public async Task UpdateTest()
{
var mockLogger = new Mock<ILogger<SteamGameService>>();
var service =
ServiceProvider.GetService<ISteamGameService>()
?? throw new Exception("ISteamGameService is null");
service.OnLogoDownloadComplete += async (stream, i) =>
{
await using var fileStream = new FileStream(
@$"D:\localDevTemp\Stream\{Guid.NewGuid():N}",
FileMode.Create,
FileAccess.Write
);
var name = fileStream.Name;
await stream.CopyToAsync(fileStream);
await fileStream.FlushAsync();
await fileStream.DisposeAsync();
return name;
};
service.OnAchievementIconDownloadComplete += async (stream, _, _) =>
{
await using var fileStream = new FileStream(
@$"D:\localDevTemp\Stream\{Guid.NewGuid():N}",
FileMode.Create,
FileAccess.Write
);
var name = fileStream.Name;
await stream.CopyToAsync(fileStream);
await fileStream.FlushAsync();
await fileStream.DisposeAsync();
return name;
};
service.OnAchievementIconGrayDownloadComplete += async (stream, _, _) =>
{
await using var fileStream = new FileStream(
@$"D:\localDevTemp\Stream\{Guid.NewGuid():N}",
FileMode.Create,
FileAccess.Write
);
var name = fileStream.Name;
await stream.CopyToAsync(fileStream);
await fileStream.FlushAsync();
await fileStream.DisposeAsync();
return name;
};
await service.UpdateGamesAsync();
}
[Test]
public async Task GetGamesTest()
{
var service =
ServiceProvider.GetService<ISteamGameService>()
?? throw new Exception("ISteamGameService is null");
var list = await service.GetGamesAsync();
Assert.That(list, Is.Not.Null);
Assert.That(list, Is.Not.Empty);
await using var fileStream = new FileStream(
@"D:\work\temp data\steam_data.json",
FileMode.Create,
FileAccess.Write
);
await JsonSerializer.SerializeAsync(
fileStream,
list,
options: new JsonSerializerOptions { WriteIndented = true }
);
await fileStream.FlushAsync();
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
上述代码是一个使用 NUnit 测试框架编写的单元测试类,主要用于测试与 Steam 游戏相关的服务。以下是代码的主要功能和结构的详细解释:
1. 命名空间和引用
using语句引入了必要的命名空间,包括System、System.IO、System.Net.Http、System.Text.Json、System.Threading.Tasks、Microsoft.Extensions.Logging、Moq和NUnit.Framework。- 这些命名空间提供了文件操作、HTTP 请求、JSON 序列化、异步编程、日志记录、模拟对象和单元测试的功能。
2. 类定义
SteamGameTest类继承自Basic类,并使用[TestFixture]特性标记为测试类。- 该类包含两个测试方法:
UpdateTest和GetGamesTest。
3. HttpClient 实例
- 创建了一个
HttpClient实例,设置了基本地址为https://api.steampowered.com,这可能是 Steam API 的基础 URL。
4. UpdateTest 方法
UpdateTest是一个异步测试方法,主要用于测试ISteamGameService的UpdateGamesAsync方法。- 使用 Moq 创建了一个
ILogger<SteamGameService>的模拟对象。 - 从服务提供者获取
ISteamGameService实例,并确保它不为 null。 - 为
service注册了三个事件处理程序,分别处理游戏 logo 下载、成就图标下载和灰色成就图标下载的完成事件。这些处理程序会将下载的流保存到指定路径的文件中,文件名为一个新的 GUID。 - 最后,调用
service.UpdateGamesAsync()方法,执行游戏更新操作。
5. GetGamesTest 方法
GetGamesTest是另一个异步测试方法,主要用于测试ISteamGameService的GetGamesAsync方法。- 从服务提供者获取
ISteamGameService实例,并确保它不为 null。 - 调用
GetGamesAsync方法获取游戏列表,并进行断言,确保列表不为 null 且不为空。 - 将获取的游戏列表序列化为 JSON 格式,并保存到指定路径的文件中。
6. 断言
- 在
GetGamesTest方法中,使用Assert.IsNotNull和Assert.IsNotEmpty来验证返回的游戏列表的有效性。
总结
这个测试类的主要目的是验证 ISteamGameService 的功能,包括更新游戏信息和获取游戏列表。通过模拟事件处理程序,测试了文件下载的功能,并将结果保存为 JSON 文件以供后续分析。
评论加载中...