.net核心中的单元测试Url.Link

Car*_*mas 3 c# unit-testing asp.net-core-mvc .net-core

我正在使用.net core创建API。我的方法之一是插入新记录的POST。成功的响应返回201 Created。在.net中,我可以使用助手CreatedResult例如

return Created(new Uri(Url.Link("get_method", new { id = record.id })), record);
Run Code Online (Sandbox Code Playgroud)

这将返回带有正确的Location标头设置的201响应。Location标头使用传入的请求使用主机名来构建URL。

在.net webapi2中进行单元测试时,我可以创建一个自定义HttpRequestMessage并自行设置主机名。现在,这似乎已在新的.net核心框架中消失了。

如何模拟传入的请求,以便可以进行单元测试并创建有效的Location标头。

我相信我需要在控制器的HttpContext上模拟HttpRequest。

UserController controller = new UserController();
controller.ControllerContext.HttpContext.Request = ?
Run Code Online (Sandbox Code Playgroud)

如何模拟此Request参数?这是一个只读属性。

Car*_*mas 6

在@Nkosi之后,我发现我需要模拟IUrlHelper

Mock<IUrlHelper> urlHelper = new Mock<IUrlHelper>();
urlHelper.Setup(x => x.Link(It.IsAny<string>(), It.IsAny<object>())).Returns("http://localhost");

UserController controller = new UserController();
controller.Url = urlHelper.Object
Run Code Online (Sandbox Code Playgroud)

现在,当在控制器内部调用Url.Link时,它将返回我的https:// localhost