Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# net核心中的单元测试Url.Link_C#_Unit Testing_Asp.net Core Mvc_.net Core - Fatal编程技术网

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

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

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

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时,它返回我的