我正在为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并没有真正反映发生了什么,但是没有适合这种情况的状态代码,并且当应用程序处于正常使用状态时,它不会导致浏览器出错。
人们对此设计的看法是什么?它会有任何不利影响吗?
答案 0 :(得分:2)
为什么不测试控制器? 应该没有必要测试堆栈的IIS部分。
如果您真的想这样做,我认为隐藏的字段中填充了您要验证的数据是一种更好的方法。
答案 1 :(得分:0)
为了防止人们感兴趣我决定不使用状态代码,因为它有点hacky,我只是在响应中添加一个标头,并对其执行断言:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (!ModelState.IsValid)
{
Response.AddHeader("Validation", "Failed");
}
base.OnActionExecuted(filterContext);
}