返回不同的HTTP状态代码进行测试

时间:2011-11-22 10:48:04

标签: c# .net asp.net-mvc testing

我正在为MVC Web应用程序编写一些集成测试,其中涉及在我使用IIS Express启动的应用程序实例中触发http post和get请求。

问题在于我想断言验证已经过去了(例如在创建帐户时),显然这不可能仅仅通过与返回的标记混合的验证消息来解释(这不是不可能的,而是出于问题)。

我目前正在做的是检查ModelState事件中我的控制器基类中的OnActionExecuted并将状态代码设置为202(已接受但仍需要处理):

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
     if (!ModelState.IsValid)
     {
          Response.StatusCode = 202;
     }

     base.OnActionExecuted(filterContext);
}

我知道202并没有真正反映发生了什么,但是没有适合这种情况的状态代码,并且当应用程序处于正常使用状态时,它不会导致浏览器出错。

人们对此设计的看法是什么?它会有任何不利影响吗?

2 个答案:

答案 0 :(得分:2)

为什么不测试控制器? 应该没有必要测试堆栈的IIS部分。

如果您真的想这样做,我认为隐藏的字段中填充了您要验证的数据是一种更好的方法。

答案 1 :(得分:0)

好吧......看起来大多数人的意见似乎都是“不关心”或“不知道”。

为了防止人们感兴趣我决定不使用状态代码,因为它有点hacky,我只是在响应中添加一个标头,并对其执行断言:

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (!ModelState.IsValid)
    {
        Response.AddHeader("Validation", "Failed");
    }

    base.OnActionExecuted(filterContext);
}