EDIT:私は、これを行うための簡単な方法を発見し、少なくともあなたは、空のキャッシュでテストしているとき。 HttpContextのCacheプロパティに対する期待値の戻り値としてHttpRunTime.Cacheを使用します。より高度なシナリオでは、ラッパーとモックを使用する方が、キャッシュから例外をテストする必要がある場合など、それを処理するより良い方法かもしれません。
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
httpContext.Expect(h => h.Cache).Return(HttpRunTime.Cache).Repeat.Any()
オリジナル:
ラッパークラスを移動するための方法ですが、私はあなたが間違った場所にそれを適用していると思います。コントローラにCacheWrapperプロパティを与え、このプロパティを設定できるCacheWrapperインスタンスを渡すためのコンストラクタを作成します。デフォルトでは、コントローラはHttpContext.Current.Cacheを使用してCacheWrapperを作成します。あなたのテストコードで、コントローラのコンストラクタに渡すための模擬CacheWrapperを構築します。この方法では、モックCacheオブジェクトを作成する必要はありません。密閉されたクラスなので、難しいです。
また、パブリックコンストラクタが存在するため、Cacheクラスのインスタンスをインスタンス化して返すこともできます。モックを使用すると、キャッシュが期待通りに使用されていることを確認できるという利点があります。そのため、おそらくラッパーを使用します。
public class CacheWrapper
{
private Cache Cache { get; set; }
public CacheWrapper()
{
this.Cache = HttpContext.Current.Cache;
}
public virtual Object Add(string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback)
{
this.Cache.Add(key,
value,
dependencies,
absoluteExpiration,
slidingExpiration,
priority,
onRemoveCallback);
}
...wrap other methods...
}
public class BaseController : Controller
{
private CacheWrapper { get; set; }
public BaseController() : this(null) { }
public BaseController(CacheWrapper cache)
{
this.CacheWrapper = cache ?? new CacheWrapper();
}
}
[TestMethod]
public void CacheTest()
{
var wrapper = MockRepository.GenerateMock<CacheWrapper>();
wrapper.Expect(o => o.Add(...)).Return(...);
var controller = new BaseController(wrapper);
var result = controller.MyAction() as ViewResult;
Assert.AreEqual(...);
wrapper.VerifyAllExpectations();
}
大きな助言が本当に助けになり、全体のプロセスが簡単になりました – P6345uk