【问题标题】:How do I build out a mocked hub for Unit Testing SignalR 2.x implementation?如何为单元测试 SignalR 2.x 实施构建模拟集线器?
【发布时间】:2014-05-01 15:41:27
【问题描述】:

我正在为我们的 SignalR 2.x 实现构建单元测试。 我们的实现利用访问存储在 Context 中的请求 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 库中的其他位置? 或者..,有没有其他方法可以做到这一点??

谢谢, 约翰B

【问题讨论】:

    标签: unit-testing cookies signalr moq signalr-hub


    【解决方案1】:

    在 SignalR 1.0 中,IRequest.Cookies 的类型从 IRequestCookieCollection 更改为 IDictionary&lt;string, Cookie&gt;。作为此更改的一部分,IRequestCookieCollection 已被删除。

    更改 mockCookies 以反映新类型应该可以解决您的问题:

    var mockCookies = new Mock<IDictionary<string, Cookie>>();
    

    但是,模拟 IDictionary 可能会很痛苦,因此使用普通字典可能更容易:

    var cookies = new Dictionary<string, Cookie>();
    // ...
    mockRequest.Setup(r => r.Cookies).Returns(cookies);
    

    https://github.com/SignalR/SignalR/issues/1034

    【讨论】:

    • 感谢您的反馈。我也想通了。但是,我很难添加它。我尝试了以下代码: cookie = new Microsoft.AspNet.SignalR.Cookie("Test", "CookieValue"); mockCookies.Object.Add("测试", cookie);此调用未按预期运行。如果我在“添加”之后查看@mockCookies,我看不到该条目被添加到字典中。我在这里想念什么? JB
    • 使用普通字典即可。我已经更新了我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多