【问题标题】:How to get the object from HttpActionResult Ok method (Web Api)? [duplicate]如何从 HttpActionResult Ok 方法(Web Api)获取对象? [复制]
【发布时间】:2015-07-12 05:36:21
【问题描述】:

我正在学习一些 Web Api 基础知识,我想通过 Ok(object) 返回并传递一个对象。像这样的:

[HttpGet]
public IHttpActionResult Get()
{
    var someString = "";
    return Ok(someString);
}

现在我想测试这个方法并断言这个 Get() 方法返回的字符串是否与预期的相同。我猜应该是这样的:

[TestMethod]
public void TestGet()
{
    IHttpActionResult result = controller.Get();
    Assert.AreEqual("", result.??);
}

我看到了this 的问题,但最好的答案是解释如何验证HttpStatusCode,而不是传递的对象。

【问题讨论】:

  • 与其测试结果是否完全相等,你关心的结果是什么?
  • @JonSkeet 你是对的。我不会尝试测试传递的对象是否有效,而是插入一些后置条件,并根据它们返回不同的HttpActionResults。非常感谢。
  • 其实有些情况下测试返回的结果是有意义的。
  • @KhanhTO 举个例子。
  • 例如:测试工厂方法时,需要测试返回的对象是否是期望的类型。测试返回结果有意义的情况不胜枚举,这只是一个例子。

标签: c# asp.net-web-api


【解决方案1】:

您可以通过将结果转换为OkNegotiatedContentResult<string> 并访问其Content 属性来访问返回的字符串。

[TestMethod]
public void TestGet()
{
    IHttpActionResult actionResult = controller.Get();
    var contentResult = actionResult as OkNegotiatedContentResult<string>;
    Assert.AreEqual("", contentResult.Content);
}

示例代码来自:http://www.asp.net/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api

【讨论】:

  • @CodeCaster:已更新。但有时我认为代码很简单,不言自明。
猜你喜欢
  • 2020-08-10
  • 2019-01-27
  • 2017-01-04
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2019-06-14
相关资源
最近更新 更多