2016-05-11 16 views
0

私の頭をすべて掴んで、下のインターフェースをmoqしようとしました。 GetOrSetは私に迷惑をかける。サービスは、コード内でhere擬似ラムダパラメータレス式

public interface ICacheService 
{ 
    T GetOrSet<T>(string cackeKey, int expiryInMinutes, Func<T> getItemCallback) where T : class; 
} 

public class CacheService : ICacheService 
{ 
    public T GetOrSet<T>(string cacheKey, int expiryInMinutes, Func<T> getItemCallback) where T : class 
    { 

     T item = MemoryCache.Default.Get(cacheKey) as T; 
     if (item == null) 
     { 
      item = getItemCallback(); 
      MemoryCache.Default.Add(cacheKey, item, DateTime.Now.AddMinutes(expiryInMinutes)); 
     } 
     return item; 
    } 
} 

例から来ている:

var result = _cacheService.GetOrSet(
     cacheKey, 
     cacheExpiry, 
    () => this.GetRoutes(routeType)); 
return result.Select(x => new Route(x)); 
+0

あなたの質問がありますか? – stuartd

+0

質問は、GetOrSet メソッドをmoqする方法です。 – gnome

+0

何をする? 'mock.Setup(m => m.GetOrSet(" key "、1、()=> new TestClass()));' – stuartd

答えて

1

基本的な設定は次のようになります。

public static ICacheService GetMockCacheService<T>() where T : class 
{ 
    var mock = new Mock<ICacheService>(); 

    mock.Setup(service => service.GetOrSet(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<Func<T>>())) 
     .Returns(default(T)); 

    return mock.Object; 
} 

使用あなたが必要とするあらゆるタイプのためのあなたのモックを構築するための汎用的な方法を実装。

+0

ありがとうございます。あなたの例が本当に助けになっているのを見てください。 – gnome