我在.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(); } }
我不知道HubConnection的实现。但是我猜您实际上是在HubConnection内部进行通信。在单元测试中,您必须模拟这些操作
为什么要创建实际的HubConnection对象。我认为它应该从接口派生,并且您还必须模拟HubConnection。