我正在为我们的signalr2构建单元测试。x实现。我们的实现利用访问存储在上下文中的请求cookie。
因此,为了构建单元测试,我们必须创建一个模拟cookie集合并将其与模拟请求对象关联。
我在SignalR 1.x中看到了下面的代码块:
const string connectionId = "1234";
const string hubName = "Chat";
var mockConnection = new Mock<IConnection>();
var mockUser = new Mock<IPrincipal>();
var mockCookies = new Mock<IRequestCookieCollection>();
var mockPipelineInvoker = new Mock<IHubPipelineInvoker>();
var mockRequest = new Mock<IRequest>();
mockRequest.Setup(r => r.User).Returns(mockUser.Object);
mockRequest.Setup(r => r.Cookies).Returns(mockCookies.Object);
StateChangeTracker tracker = new StateChangeTracker();
Clients = new HubConnectionContext(mockPipelineInvoker.Object, mockConnection.Object, hubName, connectionId, tracker);
Context = new HubCallerContext(mockRequest.Object, connectionId);
我遇到的问题,试图创建模拟cookie集合。上面的IRequestCookieCollection没有定义。
var mockCookies = new Mock<IRequestCookieCollection>();
是否在SignalR库中移动到其他地方?或. .有别的方法吗?
谢谢,JohnB
在SignalR 1.0中,将IRequest.Cookies
的类型由IRequestCookieCollection
更改为IDictionary<string, Cookie>
。作为此更改的一部分,IRequestCookieCollection
被删除。
更改mockCookies
以反映新类型应该可以解决您的问题:
var mockCookies = new Mock<IDictionary<string, Cookie>>();
然而,模拟字典可能会很痛苦,所以使用普通的字典可能更容易:
var cookies = new Dictionary<string, Cookie>();
// ...
mockRequest.Setup(r => r.Cookies).Returns(cookies);
https://github.com/SignalR/SignalR/issues/1034