ASP.NET MVCでHttpContext,HttpContextBase,HttpContextWrapper連絡
1071 ワード
HttpContext
HttpContextは最も原始的なASPである.NET Context. MVCの目的の一つはユニットテストが可能である.HttpContextにはbase classがない、virtualではないので、ユニットでテストすることはできません.
HttpContextBase
HttpContextBaseは、MVCにおいてHttpContextに代わるものである.しかし、これはabstractクラスで、mockableです.
HttpContextWrapper
HttpContextWrapperは、HttpContextBaseの実装クラスである、HttpContextを真に置き換えるために使用され、new HttpContextWrapper(HttpContext.Current)方式でttpContextWrapperを作成することができる.コードを見てみると,HttpContextとHttpContextWrapperは属性メソッドの設定は基本的に同じであるが,HttpContextWrapperはvirtualではなくbase classがあるため,セルテストが可能である.ここで、HttpContextを使用する方法については、HttpContextWrapperでセルテストを行うことができます.ASPを観察する.NET MVCのソースコードは、最終MVCHandler(ASP.NET MVCのHttpHandler)では、ProcessRequest(HttpContext context)メソッドを呼び出す際に、その内部でHttpContextをHttpContextWrapperに変換し、その後に続く処理を行うためにProcessRequest(HttpContext context)を呼び出すことが分かる.
HttpContextは最も原始的なASPである.NET Context. MVCの目的の一つはユニットテストが可能である.HttpContextにはbase classがない、virtualではないので、ユニットでテストすることはできません.
HttpContextBase
HttpContextBaseは、MVCにおいてHttpContextに代わるものである.しかし、これはabstractクラスで、mockableです.
HttpContextWrapper
HttpContextWrapperは、HttpContextBaseの実装クラスである、HttpContextを真に置き換えるために使用され、new HttpContextWrapper(HttpContext.Current)方式でttpContextWrapperを作成することができる.コードを見てみると,HttpContextとHttpContextWrapperは属性メソッドの設定は基本的に同じであるが,HttpContextWrapperはvirtualではなくbase classがあるため,セルテストが可能である.ここで、HttpContextを使用する方法については、HttpContextWrapperでセルテストを行うことができます.ASPを観察する.NET MVCのソースコードは、最終MVCHandler(ASP.NET MVCのHttpHandler)では、ProcessRequest(HttpContext context)メソッドを呼び出す際に、その内部でHttpContextをHttpContextWrapperに変換し、その後に続く処理を行うためにProcessRequest(HttpContext context)を呼び出すことが分かる.
public ProcessRequest(HttpContext context)
{
HttpContextWrapper _context = new HttpContextWrapper(context);
ProcessRequest(_context);
}
public ProcessRequest(HttpContextBase context)
{
// Controller,Action
}