public static void Main()
var unittest = new Unittests();
var cacheMock = new Mock<ICache>();
.Setup(c => c.GetOrSet<MyModel>(It.IsAny<string>(), It.IsAny<Func<MyModel>>()))
.Returns((string key, Func<MyModel> captured) => { return captured(); });
var stuffs = new Stuffs(cacheMock.Object);
var result = stuffs.GetModel();
Assert.Equals(5, result.MyProperty);
public int MyProperty { get; set; }
public Stuffs(ICache cache)
public MyModel GetModel()
var model = _cache.GetOrSet("cache-key", () =>
T GetOrSet<T>(string key, Func<T> setter);
public class Cache : ICache
public T GetOrSet<T>(string key, Func<T> setter)