gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:24:10 25 4
gpt4 key购买 nike

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

return Created(new Uri(Url.Link("get_method", new { id = record.id })), record);

这将返回带有正确 Location header 集的 201 响应。 Location header 使用传入请求使用主机名构建 url。

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

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

我认为我需要在 Controller 的 HttpContext 上模拟 HttpRequest。

UserController controller = new UserController();
controller.ControllerContext.HttpContext.Request = ?

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

最佳答案

在@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

现在,当在 Controller 内部调用 Url.Link 时,它会返回我的 https://localhost

关于c# - .net 核心中的单元测试 Url.Link,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42194124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com