gpt4 book ai didi

c# - 不强制转换返回类型的单元测试 IHttpActionResult

转载 作者:行者123 更新时间:2023-11-30 22:54:28 24 4
gpt4 key购买 nike

我有一个 Web API Controller ,其方法类似于(截断不相关的位):

[HttpGet]
public IHttpActionResult Order(int orderId) {
// ...
var response = new OrderResponse {
Data = orderData,
Message = message,
};
return Json(response);
}

我有一个测试断言预期的 JsonResult<OrderResponse>.Content 的值.

自接口(interface)IHttpActionResult不申报Content ,我目前正在将单元测试中的结果转换为 JsonResult .但是,这需要我的测试知道返回是如何在我的 Controller 中实现的,如果可能的话,我想实现更松散的耦合,这样我的测试就不会在响应实现发生变化时中断。

[TestCase(-1, "The requested order (-1) was not found.")]
public void Test_Returns_NotFound_For_NonExistent_OrderId(int orderId, string expected) {
var sut = new OrderController()
// ...
var result = sut.Order(orderId);

// I am doing this to get access to `Content`:
var materializedResult = result as JsonResult<OrderResponse>;

expected.Should().BeEquivalentTo(materializedResult.Content.Message)
}

最佳答案

简而言之?只使用界面上可用的方法!

  var controller = new ValuesController();
controller.Configuration = new System.Web.Http.HttpConfiguration();
controller.Request = new System.Net.Http.HttpRequestMessage();
var result = controller.Get(1);

var response = result.ExecuteAsync(new System.Threading.CancellationToken());
String deserialized = response.Result.Content.ReadAsStringAsync().Result;
Assert.AreEqual("\"value\"", deserialized);

IHttpActionResult 只包含一个方法 -- ExecuteAsync。所以叫它!它将返回一个 HttpResponseMessage,其中将包含您要查找的内容。您可能希望使您的单元测试异步并实际等待结果,但这应该可以帮助您入门。

关于c# - 不强制转换返回类型的单元测试 IHttpActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242027/

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