2016-05-11 2 views
0

Как моя голова все ударилась, пытаясь найти интерфейс ниже. GetOrSet заставил меня сработать. Услуга происходит от hereMock Lambda Parameterless Expression

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

Вопрос в том, как moq, что метод GetOrSet . – 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