我正在为SignalR 2.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
答案 0 :(得分:0)
在SignalR 1.0中,IRequest.Cookies
的类型已从IRequestCookieCollection
更改为IDictionary<string, Cookie>
。作为此更改的一部分,IRequestCookieCollection
已被删除。
更改mockCookies
以反映新类型应解决您的问题:
var mockCookies = new Mock<IDictionary<string, Cookie>>();
然而,嘲弄IDictionary可能会很痛苦,因此使用普通词典可能更容易:
var cookies = new Dictionary<string, Cookie>();
// ...
mockRequest.Setup(r => r.Cookies).Returns(cookies);