【发布时间】:2015-11-06 17:36:10
【问题描述】:
我有一个简单的 Web Api 方法,它返回一个列表。我决定作为一般项目规则,如果特定 userId 的列表为空,我们返回一个内容为空的 Ok() 方法。 我的 web api 方法如下所示:
[Route("")]
[HttpGet]
public IHttpActionResult GetPersonalList()
{
var result = _facade.Get(_userContext.Get());
if (result == null)
return Ok(); //here is the point
return Ok(new PersonalExpensesReportViewModel(result));
}
试图使这种方法的覆盖率达到 100%,我想测试我提到的场景,但我无法实现如何为空内容编写断言。
[TestMethod]
public void GetPersonalList_NoContent_Ok()
{
//Arrange
_facade.Setup(x => x.Get(_userContext.Object.GetPersonnelNumber(), null)).Returns((PersonalExpensesReport)null);
//Act
var result = _controller.GetPersonalList();
//Assert
var negociatedResult = result as OkResult;
Assert.IsNotNull(result);
// ?? I want something like Assert.IsNull(negociatedResult.Content)
}
由于我没有特定的类型来使 result as OkNegotiatedContentResult 期望 T 类型被实例化,所以我考虑强制转换为 OkResult,但 我没有此类中的“内容”属性。
有人知道在这种情况下如何处理吗?
【问题讨论】:
-
为什么你不想使用
204 No Content作为空列表? -
因为 UI 开发人员是这样定义的 :( 我知道那个解决方案,在这种情况下,单元测试变得更简单,但我无法应用它。
-
好的,你试过
OkNegotiatedContentResult吗?
标签: c# unit-testing asp.net-web-api moq