如何在 C# Core 2.1 中模拟 this.HttpContext.WebSockets.AcceptWebSocketAsync()
How to Mock this.HttpContext.WebSockets.AcceptWebSocketAsync() in c# core 2.1
我正在尝试模拟 this.HttpContext.WebSockets.AcceptWebSocketAsync() 的调用,其中 returns 一个 WebSocket 对象。
我的class如下:
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<>
所需的 class,并使用 Setup()
委托来return 具有 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;
我正在尝试模拟 this.HttpContext.WebSockets.AcceptWebSocketAsync() 的调用,其中 returns 一个 WebSocket 对象。 我的class如下:
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<>
所需的 class,并使用 Setup()
委托来return 具有 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;