是否可以<T>使用Moq框架模拟IHubcontext?



我有一个控制器,它在构造函数中注入了一个IHubContext<T>对象。我想对向组中添加和从组中删除connectionId进行单元测试。我在问我该怎么做?我试过这个:

public interface IMyHubContext :IHubContext<MyHub>
{
Task AddToGroupAsync(string connectionId, string groupName, CancellationToken cancellationToken = default);
Task RemoveFromGroupAsync(string connectionId, string groupName, CancellationToken cancellationToken = default);
}
var cs = new CancellationTokenSource();
var ct = cs.Token;

Mock<IMyHubContext> hubMoq = new Mock<IMyHubContext>();
hubMoq.Setup(a => a.RemoveFromGroupAsync("123", $"{groupName}", ct)).Returns(null);

但这会产生编译时错误。

编译时错误可能是由于将null传递给Returns而产生的。由于RemoveFromGroupAsync返回类型是Task,我认为您需要将此调用设置如下:

hubMoq.Setup(a => a.RemoveFromGroupAsync("123", $"{groupName}", ct))
.Returns(Task.CompletedTask);

最新更新