C# net核心中的单元测试Url.Link
我正在使用.NETCore创建一个API。 我的一个方法是使用POST插入新记录。成功的响应返回一个已创建的值。在.net中,我可以使用助手CreatedResult,例如C# net核心中的单元测试Url.Link,c#,unit-testing,asp.net-core-mvc,.net-core,C#,Unit Testing,Asp.net Core Mvc,.net Core,我正在使用.NETCore创建一个API。 我的一个方法是使用POST插入新记录。成功的响应返回一个已创建的值。在.net中,我可以使用助手CreatedResult,例如 return Created(new Uri(Url.Link("get_method", new { id = record.id })), record); 这将返回设置了正确位置标头的201响应。Location标头使用传入请求使用主机名构建url 在.NETWebAPI2中进行单元测试时,我可以创建一个自定义的Ht
return Created(new Uri(Url.Link("get_method", new { id = record.id })), record);
这将返回设置了正确位置标头的201响应。Location标头使用传入请求使用主机名构建url
在.NETWebAPI2中进行单元测试时,我可以创建一个自定义的HttpRequestMessage并自己设置主机名。现在这似乎已经在新的.net核心框架中消失了
如何模拟传入请求,以便进行单元测试并创建有效的位置头
我认为我需要在控制器的HttpContext上模拟HttpRequest
UserController controller = new UserController();
controller.ControllerContext.HttpContext.Request = ?
如何模拟此请求参数?这是一个只读属性。在Github上检查asp.net核心的一些单元测试时,发现了一个适合您需要的测试。他们的测试使用了最小起订量
controller.ControllerContext.HttpContext.Request["parameter_name"]
// Arrange
var controller = new UserController();
var request = Mock.Of<HttpRequest>();
var httpContext = new Mock<HttpContext>();
httpContext
.Setup(c => c.Request)
.Returns(request);
controller.ControllerContext.HttpContext = httpContext.Object;
// Act
//...
//排列
var controller=new UserController();
var request=Mock.Of();
var httpContext=new Mock();
httpContext
.Setup(c=>c.Request)
.返回(请求);
controller.ControllerContext.HttpContext=HttpContext.Object;
//表演
//...
继@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
Mock urlHelper=new Mock();
urlHelper.Setup(x=>x.Link(It.IsAny(),It.IsAny())。返回(“http://localhost");
UserController=新的UserController();
controller.Url=urlHelper.Object
现在,当在控制器内调用Url.Link时,它返回我的