我正在尝试模拟这样的调用。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;