using System.IO;
using System.Text.Json;
namespace Dpz.Core.ServiceTest;
[TestFixture]
public class SteamGameTest : Basic
{
[Test]
public async Task UpdateTest()
{
var service =
ServiceProvider.GetService<ISteamGameService>()
?? throw new Exception("ISteamGameService is null");
service.OnLogoDownloadComplete += 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();
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();
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();
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 游戏相关的服务功能。让我详细解释一下代码的各个部分:
类结构
[TestFixture]
public class SteamGameTest : Basic
[TestFixture]标记这是一个测试类- 继承自
Basic类,可能包含一些基础的测试设置和服务提供者配置
第一个测试方法:UpdateTest()
这个测试主要验证 Steam 游戏数据的更新功能:
服务获取
var service = ServiceProvider.GetService<ISteamGameService>()
?? throw new Exception("ISteamGameService is null");
从依赖注入容器中获取 ISteamGameService 实例
事件处理器设置
代码设置了三个事件处理器,用于处理不同类型的图片下载:
Logo 下载完成事件
service.OnLogoDownloadComplete += async (stream, _) => { ... }成就图标下载完成事件
service.OnAchievementIconDownloadComplete += async (stream, _, _) => { ... }成就图标灰色版本下载完成事件
service.OnAchievementIconGrayDownloadComplete += async (stream, _, _) => { ... }
每个事件处理器都执行相同的操作:
- 使用 GUID 生成唯一文件名
- 在指定目录创建文件流
- 将下载的图片数据复制到文件
- 刷新并保存文件
- 返回文件路径
执行更新
await service.UpdateGamesAsync();
调用服务的更新方法,触发游戏数据和相关图片的下载
第二个测试方法:GetGamesTest()
这个测试验证游戏数据的获取和序列化功能:
获取游戏列表
var list = await service.GetGamesAsync();
断言验证
Assert.That(list, Is.Not.Null);
Assert.That(list, Is.Not.Empty);
验证返回的游戏列表不为空且包含数据
数据序列化
await JsonSerializer.SerializeAsync(
fileStream,
list,
options: new JsonSerializerOptions { WriteIndented = true }
);
将游戏列表序列化为格式化的 JSON 文件保存到本地
总结
这个测试类主要用于:
- 功能测试:验证 Steam 游戏服务的核心功能
- 集成测试:测试图片下载和文件保存的完整流程
- 数据导出:将获取的游戏数据导出为 JSON 格式便于分析
代码使用了现代 C# 的异步编程模式,并包含了适当的资源管理(using 语句)和错误处理。
AI 正在分析代码…
评论加载中...