问题描述
我需要测试ClientConnectionProvider
类,但是不能在下面给出的测试类中模拟private IHubContext<SignalrServerHub,IBroadcast> HubContext { get; set; }
。如何在测试类中使用的hubcontext
中模拟客户端?
public class ClientConnectionProvider : IConnectionProvider
{
private readonly ILogger<ClientConnectionProvider> logger;
private IHubContext<SignalrServerHub,IBroadcast> HubContext { get; set;}
/// <summary>
/// Initializes a new instance of the <see cref="ClientConnectionProvider"/> class.
/// </summary>
/// <param name="logger"></param>
/// <param name="hubContext"></param>
public ClientConnectionProvider(ILogger<ClientConnectionProvider> logger,IHubContext<SignalrServerHub,IBroadcast> hubContext)
{
this.logger = logger;
HubContext = hubContext;
}
/// <summary>
/// To create and save a connection based on clients on connect.
/// </summary>
/// <param name="groupName"><see cref="string"/>.</param>
/// <returns>Task of <see cref="Task"/>.</returns>
public async Task<ServiceMethodResponse> SubscribeConnectionToAGroup(ClientConnection connection)
{
await HubContext.Groups.AddToGroupAsync(connection.ConnectionId,"HubUsers");
return new ServiceMethodResponse()
{
IsSuccess = true,IsValid = true,Message = "Subscribed to a group"
};
}
}
public class ConnectionProviderTest
{
private Mock<ILogger<ClientConnectionProvider>> logger;
private Mock<IDispatcher> dispatcher;
private Mock<IServiceProvider> serviceProvider;
private Mock<IConnectionProvider> connectionProvider;
private Mock<IHubContext<SignalrServerHub,IBroadcast>> HubContext;
//Mock<IClientProxy> mockClientProxy = new Mock<IClientProxy>();
private Mock<IClientProxy> mockClientProxy = new Mock<IClientProxy>();
/// <summary>
/// Initializes a new instance of the <see cref="ConnectionProviderTest"/> class.
/// </summary>
public ConnectionProviderTest()
{
this.logger = new Mock<ILogger<ClientConnectionProvider>>();
this.HubContext = new Mock<IHubContext<SignalrServerHub,IBroadcast>>();
this.connectionProvider = new Mock<IConnectionProvider>();
this.dispatcher = new Mock<IDispatcher>();
}
[Fact]
public async Task SendNotificationToAllFoundSuccess()
{
Mock<IHubClients> mockClients = new Mock<IHubClients>();
Mock<IClientProxy> mockClientProxy = new Mock<IClientProxy>();
mockClients.Setup(clients => clients.All).Returns(mockClientProxy.Object);
ClientConnectionProvider clientConnectionProvider = new ClientConnectionProvider( this.logger.Object,this.HubContext.Object);
this.HubContext.Setup(x => x.Clients).Returns(() => (IHubClients<IBroadcast>)mockClients.Object);
NotificationPayload payload = new NotificationPayload
{
Message = "RnadomHashString",SubscriptionTypes = new List<SubscriptionType>() { new SubscriptionType { SubscriptionTypeName = "HubUsers" } },};
ServiceMethodResponse response = await clientConnectionProvider.SendNotificationToAll(payload).ConfigureAwait(true);
Assert.True(response.IsValid);
}
}
如何测试ClientConnectionProvider的方法?发生错误System.InvalidCastException:无法将类型为'Castle.Proxies.IHubClients`1Proxy'
的对象转换为类型为'Microsoft.AspNetCore.SignalR.IHubClients`1[Platform.PushNotification.Services.SignalRHub.IBroadcast]'
的对象。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)