【发布时间】:2022-01-05 02:31:24
【问题描述】:
我正在使用 Discord.Net 包为我提供 DiscordSocketClient 类,该类目前是我的 DI 容器中的单例。我需要实例中的几种方法
Task LoginAsync(TokenType tokenType, string token, bool validateToken = true)Task StartAsync()Task LogoutAsync()Task StopAsync()
给定这个使用方法的示例类
public sealed class ConsumingClass
{
private readonly DiscordSocketClient _discordSocketClient;
public ConsumingClass(DiscordSocketClient discordSocketClient)
{
_discordSocketClient = discordSocketClient;
}
public override async Task Initialize(CancellationToken cancellationToken)
{
await _discordSocketClient.LoginAsync(TokenType.Bot, "my-token");
await _discordSocketClient.StartAsync();
}
public override async Task TearDown(CancellationToken cancellationToken)
{
await _discordSocketClient.LogoutAsync();
await _discordSocketClient.StopAsync();
}
}
我想使用 XUnit 和 Moq 创建测试,以确保 ConsumingClass 的实例按预期工作。
很遗憾,DiscordSocketClient 不提供接口,因此我无法在我的测试中注入模拟实现。
这些方法也不是虚拟的,因此无法创建Mock<DiscordSocketClient> 的实例并使用.Setup() 来设置模拟实现。
那么我如何在我的测试用例中验证客户端方法是否已被调用一次?例如。 _discordSocketClientMock.Verify(discordSocketClient => discordSocketClient.LoginAsync(), Times.Once());
我是否必须创建一个接口IMyDiscordSocketClient 提供这些方法和一个类,另一个类MyDiscordSocketClient 继承自DiscordSocketClient 并实现该接口并使用它?或者有没有更好的方法?
【问题讨论】:
标签: c# moq xunit discord.net