У меня есть контроллер, который имеет метод GetAll
(показать все кремы)
public class AdminController : Controller
{
private readonly ICreamUOW creamUOW;
public AdminController( ICreamUOW creamUOW)
{
this.creamUOW = creamUOW;
}
[HttpGet]
[Authorize(Roles = "Administrator")]
public PartialViewResult TableCreams()
{
return PartialView(creamUOW.Creams.GetAll.ToList());
}
}
Я понимаю шаблон Единица работы для моих хранилищ
public class CreamUOW : ICreamUOW
{
private readonly CreamEFDbContext contextDb;
private CreamRepository creamRepository;
public CreamUOW()
{
this.contextDb = new CreamEFDbContext();
}
//properties
public CreamRepository Creams
{
get
{
if (creamRepository == null)
creamRepository = new CreamRepository(contextDb);
return creamRepository;
}
}
}
и его интерфейс
public interface ICreamUOW : IDisposable
{
CreamRepository Creams { get; }
}
Я связываю этот класс и интерфейс с помощью ниндоката IoC
kernel.Bind<ICreamUOW>().To<CreamUOW>();
(я показываю только методы и свойства, в которых у меня возникает проблема,Я реализую метод dispose в проекте, но он сейчас не важен)
мой общий интерфейс хранилища
public interface ICreamRepository<T> where T : class
{
//property
IEnumerable<T> GetAll { get; }
}
и его реализация
public class CreamRepository : ICreamRepository<CreamModel>
{
private CreamEFDbContext context;
public CreamRepository(CreamEFDbContext dbContext)
{
context = dbContext;
}
public IEnumerable<CreamModel> GetAll
{
get { return context.CreamModels.Include(x => x.CreamTypeModel); }
}
}
Я пытаюсь сделать тест, но он не работает
[TestMethod]
public void TableCreamContainCreams()
{
//arrange
List<CreamModel> creams = new List<CreamModel>()
{
new CreamModel () { Id = 1, Name = "Test te1", Description = "1" },
new CreamModel () { Id = 2, Name = "Test te2", Description = "2" }
};
private Mock<ICreamUOW> mockCreamUOW = new Mock<ICreamUOW>();
mockCreamUOW.Setup(uow => uow.Creams.GetAll).Returns(creams.ToList());
AdminController controller = new AdminController(null, null, mockCreamUOW.Object);
//action
PartialViewResult resultView = controller.TableCreams();
//assert
Assert.AreEqual(((List<CreamModel>)resultView.Model).Count(), 2);
Assert.IsTrue(((List<CreamModel>)resultView.Model).Count(p => p.Description == "1") == 1);
}
Я получаю сообщение
: Метод теста UnitTests.TestAdminController.TableCreamContainCreams вызвал исключение: System.NotSupportedException: Invalidнастройка для не виртуального (переопределяемого в VB) члена: uow => uow.Creams.GetAll
Что это значит и как написать правильный тест?Кто-нибудь может помочь?