【发布时间】:2017-07-14 11:29:10
【问题描述】:
我已经编写了这个控制器方法和这个测试。
控制器方法:
public async Task<IActionResult> Metric(string type, string source)
{
// Check existence ...
var model = await _context
.Metrics
.FirstAsync(mt => mt.Type == metricType.AsInt() && mt.Source == source);
Response.StatusCode = HttpStatusCode.OK.AsInt();
return View(model);
}
测试:
[Fact]
public async Task MetricExistsTest()
{
// Arrange ...
// Act
var result = await _controller.Metric(Metrics.CpuLoad.ToString(), "source-1");
// Assert
var viewResult = Assert.IsType<ViewResult>(result);
Assert.Equal(HttpStatusCode.OK.AsInt(), viewResult.StatusCode.Value);
var model = Assert.IsAssignableFrom<Metric>(
viewResult.ViewData.Model
);
}
现在,问题出在Assert.Equal(HttpStatusCode.OK.AsInt(), viewResult.StatusCode.Value);。 viewResult.StatusCode 确实是 null。如果我注释掉该行,一切正常。
我做错了什么?为什么是null?我是否正确设置了Response.StatusCode?那么如何验证状态码呢?
谢谢!
【问题讨论】:
-
从操作中删除
Response.StatusCode = HttpStatusCode.OK.AsInt();。默认响应(在这种情况下是视图)应该有 200 OK -
@Nkosi 如果我想设置自定义代码,比如 204 No Content,该怎么办?
-
@Nkosi - 终于明白了!看我的回答。并感谢您的帮助!
标签: c# asp.net asp.net-mvc asp.net-core xunit