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

标签 c# unit-testing asp.net-core-mvc .net-core

我正在使用 .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/

相关文章:

unit-testing - Grails 2单元测试中的元类删除域方法

unit-testing - Selenium 测试后清理数据

c# - 尝试注册时出现 Microsoft.AspNetCore.Identity.IdentityError

asp.net - 在 MVC6 中扩展 Identity3

Java:在单元测试中模拟 http/https 调用

c# - 如何对控件的属性进行分类以显示在 Blend 和 Visual studio 设计器中的适当部分?

c# - 如何在方法调用中速记数组声明?

c# - 如何规范化 float 集合,使所有元素的总和为 X

c# - asp.net core 中的常规默认路由不起作用

c# - 用于查询 GridFS 的 GridFSFileInfo 语法