网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
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.IsNotNull(list);
        Assert.IsNotEmpty(list);

        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 语句引入了必要的命名空间,包括 SystemSystem.IOSystem.Net.HttpSystem.Text.JsonSystem.Threading.TasksMicrosoft.Extensions.LoggingMoqNUnit.Framework
  • 这些命名空间提供了文件操作、HTTP 请求、JSON 序列化、异步编程、日志记录、模拟对象和单元测试的功能。

2. 类定义

  • SteamGameTest 类继承自 Basic 类,并使用 [TestFixture] 特性标记为测试类。
  • 该类包含两个测试方法:UpdateTestGetGamesTest

3. HttpClient 实例

  • 创建了一个 HttpClient 实例,设置了基本地址为 https://api.steampowered.com,这可能是 Steam API 的基础 URL。

4. UpdateTest 方法

  • UpdateTest 是一个异步测试方法,主要用于测试 ISteamGameServiceUpdateGamesAsync 方法。
  • 使用 Moq 创建了一个 ILogger<SteamGameService> 的模拟对象。
  • 从服务提供者获取 ISteamGameService 实例,并确保它不为 null。
  • service 注册了三个事件处理程序,分别处理游戏 logo 下载、成就图标下载和灰色成就图标下载的完成事件。这些处理程序会将下载的流保存到指定路径的文件中,文件名为一个新的 GUID。
  • 最后,调用 service.UpdateGamesAsync() 方法,执行游戏更新操作。

5. GetGamesTest 方法

  • GetGamesTest 是另一个异步测试方法,主要用于测试 ISteamGameServiceGetGamesAsync 方法。
  • 从服务提供者获取 ISteamGameService 实例,并确保它不为 null。
  • 调用 GetGamesAsync 方法获取游戏列表,并进行断言,确保列表不为 null 且不为空。
  • 将获取的游戏列表序列化为 JSON 格式,并保存到指定路径的文件中。

6. 断言

  • GetGamesTest 方法中,使用 Assert.IsNotNullAssert.IsNotEmpty 来验证返回的游戏列表的有效性。

总结

这个测试类的主要目的是验证 ISteamGameService 的功能,包括更新游戏信息和获取游戏列表。通过模拟事件处理程序,测试了文件下载的功能,并将结果保存为 JSON 文件以供后续分析。

loading