- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写了这个 Controller 方法和这个测试。
Controller 方法:
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
?那么如何验证状态码呢?
谢谢!
最佳答案
我终于做到了!所有帮助我回答和评论的人 - 我非常感谢!
事实证明我有两个问题 - HttpContext
在测试环境中不存在(除非手动设置)并且 Response.StatusCode
没有设置 StatusCode
在生成的 ViewResult
对象上。 (这些是我的观察,如果我错了请纠正我)。
问题1解决方案:
设置默认 HttpContext
就可以解决问题。至少, Controller 方法不会崩溃,因为 Response
不再是 null
。
var controller = new HomeController();
controller.ControllerContext = new ControllerContext();
controller.ControllerContext.HttpContext = new DefaultHttpContext();
问题2解决方案:
事实证明,我需要在 ViewResult
对象上显式设置 StatusCode
。出于某种原因,ASP.Core 不会将 StatusCode
从 Response
对象镜像到生成的 IActionObject
。 (如果我错了请纠正我)
所以这是解决方案(这是我 Controller 上的另一种方法,但它清楚地展示了这个想法):
public async Task<IActionResult> Index()
{
var model = await _context
.Metrics
.Where(mt => mt.Type == Metrics.CpuLoad.AsInt())
.ToListAsync();
var result = View(model);
result.StatusCode = (model.Any() ? HttpStatusCode.OK : HttpStatusCode.NoContent).AsInt();
return result;
}
关于c# - ViewResult.StatusCode 为空,尽管已明确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42424969/
如果我只返回一个 View ,从 Task 返回它是否有性能差异? [HttpGet] public Task Index() { return Task.FromResult(View());
所以我用函数内部的代码替换了 Controller 函数上的 [Authorize Attribute] 并想尝试返回与属性相同的结果,这可能吗?必须做出进一步的改变? 我试图从一个返回 ViewRe
我对 SO 进行了搜索,看起来这个问题经常被问到。我已经能够让模拟工作,并且我也能够毫无问题地执行 OnActionExecuted() 。这是我的单元测试。注释行是失败的行,我确信我没有 mock
我正在 MVC 5 中创建一个测试项目。 我遇到了错误 Error 1 Cannot convert type 'System.Threading.Tasks.Task' to 'System.Web
我已经编写了这个 Controller 方法和这个测试。 Controller 方法: public async Task Metric(string type, string source) {
我在我的 ASP.NET MVC Controller 上使用自定义授权过滤器,如果用户在特定操作上的授权失败,它会将用户重定向到登录屏幕以外的 url。 这对于返回 View 的操作没有问题,但我的
ASP.NET MVC 中的 ViewResult() 和 ActionResult() 有什么区别? public ViewResult Index() { return View(); }
名为 ViewResult 的 Controller 结果和 PartialViewResult 之间有什么区别?更重要的是,什么时候使用PartialViewResult? 最佳答案 Partial
我有一个 asp.net mvc4 应用程序,当我将其发布到 azure 时,加载页面的时间太长。我安装了glimpse来检查问题出在哪里,它显示 ViewResult.ExecuteResult 是
在我的单元测试中,当我使用 View 的操作名称时,ViewResult.ViewName 属性始终为空: return View(model); or return View(); 这是设计使然吗?
我正在编写一个简单的 CMS。 我希望能够加载一个 View ,将其包含在母版页中,然后扫描 HTML 以便我可以替换一些自定义标签(例如 {{blog}} 与我自己的博客输出)然后服务由浏览器决定。
其他提到 null ViewResults 的问题实际上似乎指的是 null Models(我肯定做计划测试的东西)。我是测试新手。今天刚开始我的第一个使用 TDD 的项目。我找到的一些资源,甚至是新
public override void OnException(ExceptionContext filterContext) { string controllerName = (stri
在我的 Controller 中,我有一个 Edit GET 方法来显示 View ,还有一个 Edit POST 方法来保存更改: public ViewResult Edit(int id) {
我正在尝试创建集成测试以确保我的 View 中没有任何运行时错误。因此,我需要创建一个测试来检查 ViewResult.ExecuteResult() 是否正常工作,但我似乎遇到了麻烦。 我找到了 t
我试图在 OnActionExecuted 方法覆盖 ActionFilterAttribute 类中返回一个 ViewResult 像下面... public override void OnAct
尽管 StackOverflow 上有几篇关于 MVC 中的单元测试操作结果的帖子,但我有一个具体的问题.... 这是我在 Controller 中的 ActionResult: public Act
我制作了一个 MVC 项目,我想将模型设置为来自过滤器的 View 。 但是我不知道,我该怎么做。 模型: public class TestModel { public int ID { g
如何决定是使用 ActionResult 还是 ViewResult?我知道 ActionResult 是一个抽象类,以 ViewResult 作为子类型,但我已经看到使用这两种实现相同功能的示例。它
我正在编写一些单元测试,我有一个场景,如果条件为真, Controller 操作应该返回一个 HttpNotFoundResult,否则它应该返回一个 ViewResult 并在其中包含一个特定的模型
我是一名优秀的程序员,十分优秀!