如何嘲笑这个.c#核心2.1中的HttpContext.Webockets.AcceptWebSocketSync()



我正在尝试模拟这样的调用。HttpContext.Webockets.AcceptWebSocketSync((,返回一个WebSocket对象。我的课如下:

public abstract class HttpContext
{
protected HttpContext();
public abstract WebSocketManager WebSockets { get; }
}
public abstract class WebSocketManager
{
protected WebSocketManager();
public abstract Task<WebSocket> AcceptWebSocketAsync(string subProtocol);
}
using (var webSocket = Task.Run(async () => await 
this.HttpContext.WebSockets.AcceptWebSocketAsync()))
{​​​​
socketConn.CreateConnectionHandler(obj1, obj2, webSocket.Object);
}​​​​

我也试着在接口上嘲笑CreateConnectionHandler方法,但在内部它使用了一个具体的对象,所以没有帮助。如何模拟HttpContext以获得WebSocket方法模拟对象。?任何线索都将不胜感激。

为了用模拟的WebSocketManager模拟HttpContext,您只需要Mock<>所需的类,并使用Setup()委托返回带有Return(**.Object):的实例化模拟对象

被嘲笑的WebSocket:

Mock<System.Net.WebSockets.WebSocket> mockedWebSocket = new Mock<System.Net.WebSockets.WebSocket>();
mockedWebSocket
.Setup(x => x.SendAsync(It.IsAny<ArraySegment<byte>>(),
It.IsAny<System.Net.WebSockets.WebSocketMessageType>(),
It.IsAny<bool>(),
It.IsAny<CancellationToken>()))
.Returns(Task.FromResult(true)); //Assuming boolean result - you will need to changed the return value according to the test case.

被嘲笑的WebSocketManager:

Mock<WebSocketManager> mockedWebSocketManager = new Mock<WebSocketManager>();
mockedWebSocketManager
.Setup(x => x.AcceptWebSocketAsync())
.Returns(Task.FromResult(mockedWebSocket.Object));

被嘲笑的HttpContext:

Mock<HttpContext> mockedHttpContext = new Mock<HttpContext>();
mockedHttpContext.Setup(x => x.WebSockets)
.Returns(mockedWebSocketManager.Object);

请添加using Moq;

最新更新