2010-11-23 20 views
2

私はセッションを偽装することができる例を使用しています。 これは、MVCコントローラの単体テストで使用するためのものです。ControllerContext.HttpContext.SessionとHttpContext.Current.Sessionの違いは何ですか?

mSessionItemsが私のセッションであると私はAにいるとき targetは、コントローラ確か

との私のインスタンスである

FakeHttpContext httpctx = new FakeHttpContext(null,null,null,null,mSessionItems); 
ControllerContext ctx2 = new ControllerContext(httpctx,new RouteData(), target); 

:私は、コントローラを作成し、私はこれを行う試験で

コントローラの読書this.ControllerContext.HttpContext.Session、私は素晴らしいセッションを持っている!

でも....コントローラ外のセッションも読みましたが、私はHttpContext.Current.Sessionを使用していますが、それはnullです(または実際はHttpContext.Currentはnullです)。

私は疑問に思ったのですが、2つの違いは何ですか?

答えて

2

ControllerContext.HttpContextは抽象型HttpContextBaseです。この型のデフォルトの実装(HttpContextWrapper)は、HttpContextへのアクセスをラップします。したがって、偽の実装を作成するときは、その関係をHttpContextに置き換えます。偽の実装は本当のHttpContextを作成しません。

Btw。あなたはコントローラの外でセッションにアクセスしますか?現在のHttpContextがあることをどのように知っていますか?

+0

私はHttpContext.Current.Sessionを取得します(これはもちろんnullをチェックします)。しかし、ユニットテストのシナリオでは、私は立ち往生します。 – Michel

関連する問題