【发布时间】:2017-03-10 11:27:06
【问题描述】:
我有一个 Web API 控制器方法,如下所示 SessionId 是“字符串”类型
[HttpPost]
[Route("init")]
[ApiMeter("search_init")]
public async Task<IHttpActionResult> InitiateAsync(SearchInitRequest query,
CancellationToken cancellationToken)
{
Validations.EnsureValid(query, new SearchRequestValidator());
string sessionId = await Service.InitiateSearchAsync(query, cancellationToken);
return Ok(new { sessionId });
}
我有如下测试用例
[Fact]
public void GetSearchInit_Success_Valid()
{
var mockCarService = new Mock<ICarService>();
using (new AmbientContextScope(GetCarCallContext()))
{
var request = Data.DataProvider.TestDataProvider.GetJsonResult<CarSearchInitRequest>(
SearchInitScenarioRequests.CarSearchInitSuccess);
var response = Data.DataProvider.TestDataProvider.GetResponse<CarSearchInitResponse>(
SearchInitScenarioResponse.CarSearchInitSuccess);
mockCarService.Setup(f => f.InitiateSearchAsync(request, CancellationToken.None))
.Returns(Task.FromResult(response.SessionId));
SearchController controller = new SearchController(mockCarService.Object);
var result = controller.InitiateAsync(request, CancellationToken.None).Result;
var status = result as OkNegotiatedContentResult<string>;
Assert.NotNull(status.Content);
}
}
在这个测试用例中,我的状态为null。虽然在调试时我可以看到status.Content 内部有SessionId 属性,但由于这是匿名类型,我无法读取该值。
我也试过
var status = result as OkNegotiatedContentResult<object>;
还是不行
【问题讨论】:
标签: c# testing asp.net-web-api xunit