我如何建立一个模拟中心的单元测试信号r2.x实现



我正在为我们的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

最新更新