gpt4 book ai didi

c# - 通过 Controller 使用 ExecuteAsync 测试 IHttpActionResult

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:24 25 4
gpt4 key购买 nike

简而言之:在单元测试中通过 Controller 测试 IHttpActionResult 的最佳方法是什么?


给定一个自定义 IHttpActionResult,在 ExecuteAsync 方法中包含一些逻辑

public class AcceptedResult : IHttpActionResult
{
private readonly Func<string> _ticket;

public AcceptedResultV2(HttpRequestMessage request, Func<string> ticket)
{
_ticket = ticket;
}

public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.Accepted);
response.Headers.Add("x-ticket-id", _ticket());
return response;
}
}

和一个公开IHttpActionResult

的 Controller 方法
[HttpPost]
public IHttpActionResult Get(SearchScheduledTaskRequest searchScheduledTaskRequest)
{
if(something) return new AcceptedResult(Request, () => "foo");
return new AcceptedResult(Request, () => "bar");
}

测试这个的最佳方法是什么?

目前,我已经决定手动调用 ExecuteAsync,但我必须始终调用 ExecuteAsync 有点令人不快。

我当然可以将它提取到某个地方,但是我想知道是否有更好的方法。

    [TestMethod]
public async Task Has_Request_Id()
{
var response = await _controller.Get(new SearchScheduledTaskRequest()).ExecuteAsync(CancellationToken.None);

System.Collections.Generic.IEnumerable<string> headers;
response.Headers.TryGetValues("x-request-id", out headers);
Assert.AreEqual("foo", headers.First());
}

更新:更清楚地表明我想测试 Controller 是否返回带有特定 header 的响应。

最佳答案

根据提供的代码,我将测试 AcceptedResult 类的 ExecuteAsync 方法是否返回包含正确 header 的响应,因为这应该始终是案例。

您的 Controller 测试方法只需要验证结果是否与 AcceptedResult 类型匹配。

关于c# - 通过 Controller 使用 ExecuteAsync 测试 IHttpActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718760/

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