使用 Moq 模拟上下文

Mocking a context using Moq

在调试请求时,我看到传递给的对象类型是我试图在单元测试中模拟的 Microsoft.AspNetCore.Http.DefaultHttpContext 类型,由于某种原因它是不可实例化的。

截图:
https://i.stack.imgur.com/Hag1d.png

 app.Run(async context =>
 {

 });

单元测试

var contextMock = new Mock<Microsoft.AspNetCore.Http.DefaultHttpContext>();

错误:

无需嘲笑 class。

您可以创建 DefaultHttpContext

的实例
HttpContext context = new DefaultHttpContext();
context.Request.Path = new PathString("path here");

//...

或者只是模拟 HttpContext 是您想模拟特定功能。

Mock<HttpContext> contextMock = new Mock<HttpContext>();

//...setup
var path = new PathString("path here");
contextMock.Setup(_ => _.Request.Path).Returns(path);

HttpContext context = contextMock.Object;

前者更简单,几乎不需要设置。