2011-11-22 74 views
0

我正在为MVC Web应用程序编写一些集成测试,这涉及到在IIS Express启动的应用程序的实例中激发http post并获取请求。返回不同的HTTP状态代码进行测试

问题是,我想断言验证已通过(例如在帐户创建),显然这是不可能的从只是验证消息中解释与返回标记混合(很不是不可能的,但出于问题)。

什么我目前做的是检查在我的控制器基类中的ModelStateOnActionExecuted事件和状态代码设置为202(接受,但仍然需要处理):

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

    base.OnActionExecuted(filterContext); 
} 

我知道202没有按”并没有真正反映发生了什么,但是没有符合情况的状态代码,并且在应用程序正常使用时它不会在浏览器上导致错误。

什么是人们对这种设计的意见?它会有什么不利影响?

+0

我听到你的兄弟 – jcvandan

回答

2

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

如果你真的想这样做,我认为隐藏的领域充满了你想验证的数据是一个更好的方法。

+2

我想测试应用程序运行,因为否则测试只是控制器需要我复制我的测试项目中的所有配置文件(这是一个大项目,所以有很多,我也想测试配置工程),也这些都是集成测试,所以我想测试一些东西,如授权cookie(登录等)。 – jcvandan

0

哦,好吧......看起来大多数人的意见似乎是'不关心'或'不知道'。

万一人有兴趣我已经决定不使用的状态代码,因为它是一个有点哈克,我只需添加一个头的响应,而是和做对即断言:

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

    base.OnActionExecuted(filterContext); 
}