gpt4 book ai didi

c# - 使用 header 值对 WebAPI2 Controller 方法进行单元测试

转载 作者:太空狗 更新时间:2023-10-29 19:49:07 25 4
gpt4 key购买 nike

我想在我的 WebAPI Controller 上“单元”测试一个方法。

此方法依赖于随它发送的 header 。

所以

HttpContext.Current.Request.Headers["name"]

需要在方法体中有一个值。

这样做的最佳方法是什么?我以为我可以设置将填充 HttpContext 的 ControllerContext,但无法使其正常工作。

我不想使用模拟框架或任何其他第三方工具,因为我的理解是 WebAPI2 可以很好地处理这个用例。

如果这是最好的方式,我很乐意设置 HttpContext.Current。

最佳答案

嗨,我可能来晚了一点,但我遇到了同样的问题,这就是我最终做的事情。

正如其他人所指出的,在您的 Controller 操作中使用 Request.Headers 而不是 HttpCurrentContext

    [Route("")]
[HttpGet]
public IHttpActionResult Get()
{
// The header can have multiple values, I call SingleOrDefault as I only expect 1 value.
var myHeader = Request.Headers.GetValues("X-My-Header").SingleOrDefault();
if (myHeader == "success")
{
return Ok<string>("Success!");
}

return BadRequest();
}

然后创建 HttpControllerContext 并像这样设置请求属性真的很容易:

[TestMethod]
public void Get_HeaderIsValid()
{
// Arrange
var controller = new ConfigurationsController(null);
var controllerContext = new HttpControllerContext();
var request = new HttpRequestMessage();
request.Headers.Add("X-My-Header", "success");

// Don't forget these lines, if you do then the request will be null.
controllerContext.Request = request;
controller.ControllerContext = controllerContext;

// Act
var result = controller.Get() as OkNegotiatedContentResult<string>;

// Assert
Assert.IsNotNull(result);
Assert.AreEqual("Success!", result.Content);
}

希望这有帮助:)

附言不要忘记在测试项目中添加 Web.Api.Core Reference :)

关于c# - 使用 header 值对 WebAPI2 Controller 方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508260/

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