带有单元测试的信号中心

问题描述 投票:0回答:1

我在.net Framework 4.5中使用nUnit测试和Signalr,但出现如下错误:System.Net.Http.HttpRequestException:发送请求时发生错误。----> System.Net.WebException:无法连接到远程服务器----> System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:6790

代码:

[HubName("SignalRHub")]
public class SignalRHub1 : Hub
{
    public override Task OnConnected()
    {

        return base.OnConnected();
    }
    public override Task OnDisconnected(bool stopCalled)
    {
        return base.OnDisconnected(stopCalled);
    }
    public void GetCallControlData()
    {
        Clients.Caller.SetServer("Server");
    }
}


[TestFixture]
public class SignalrHubTest1
{
    public interface IClientContract
    {

        void SetServer(string s);
    }

    [Test]
    public async Task MockSingalrHub()
    {
        var url = "http://localhost:6790";
        var connectionId = Guid.NewGuid().ToString();
        var mockRequest = new Mock<IRequest>();
        var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
        var mockProxy = new Mock<IHubProxy>();
        var _connection = new HubConnection(url);
        var clientContract = new Mock<IClientContract>();

        var mockHeaders = new Mock<INameValueCollection>();
        mockHeaders.Setup(h => h["host"]).Returns(url); 

        mockRequest.Setup(r => r.Headers).Returns(mockHeaders.Object);
        clientContract.Setup(_ => _.SetServer(It.IsAny<string>()));


        mockClients.Setup(m => m.Caller).Returns(clientContract.Object);

        var hub = new SignalRHub1()
        {

            Clients = mockClients.Object,
            Context = new HubCallerContext(mockRequest.Object, connectionId)
        };


        var _hub = _connection.CreateHubProxy("SignalRHub");
        mockProxy.Setup(x => x.Subscribe(It.IsAny<string>())).Returns(new Subscription());
        _hub.On<string>("SetServer", x => SetServer(x));

       await hub.OnConnected();
        hub.GetCallControlData();
        clientContract.VerifyAll();
        await _connection.Start();
    }
    internal void SetServer(string s)
    {
      //  throw new NotImplementedException();
    }

}
c# unit-testing signalr nunit signalr.client
1个回答
0
投票

我不知道HubConnection的实现。但是我猜您实际上是在HubConnection内部进行通信。在单元测试中,您必须模拟这些操作

为什么要创建实际的HubConnection对象。我认为它应该从接口派生,并且您还必须模拟HubConnection。

© www.soinside.com 2019 - 2024. All rights reserved.