Я хотел бы модульное тестирование DbContext, который наследует от IdentityDbContextMOq: Свойство правильно установлено как виртуальные, но все еще имеет недопустимую установку на невиртуальный члене
я получаю сообщение об ошибке в NotSupportedException
с очень распространенное сообщение:
System.NotSupportedException: Invalid установка на невиртуальный (переопределение в VB) член
Чтобы найти некоторые подсказки я уже повторно объявление кучу сообщений. Вот некоторые примеры:
Очевидно, что решение, как представляется, установить dbSet в качестве виртуального. Что я наделал.
Невероятно, ошибка остается.
Вот мой IdentityDataContext:
public class IdentityDataContext : IdentityDbContext<ApplicationUser>
{
public virtual DbSet<Search> Searches { get; set; }
public IdentityDataContext()
: base("LocalDb",
throwIfV1Schema: true)
{
}
public static IdentityDataContext Create()
{
return new IdentityDataContext();
}
}
Вот мой Поиск ПОКО:
public class Search : BaseEntity
{
//BaseEntity is just an abstract class with createdAt,Id,updatedAt property
public string ConsumerIdentifier { get; set; }
public string LanguageCode { get; set; }
}
Наконец вот мой Set Up Method:
[TestInitialize]
public void SetupTest()
{
//DataInitializer.GetAllSearches() returns a List of "Search"
_searches = DataInitializer.GetAllSearches();
var dbSet = new Mock<DbSet<Search>>();
dbSet.As<IQueryable<Search>>().Setup(m => m.Provider).Returns(_searches.AsQueryable().Provider);
dbSet.As<IQueryable<Search>>().Setup(m => m.Expression).Returns(_searches.AsQueryable().Expression);
dbSet.As<IQueryable<Search>>().Setup(m => m.ElementType).Returns(_searches.AsQueryable().ElementType);
dbSet.As<IQueryable<Search>>().Setup(m => m.GetEnumerator()).Returns(_searches.AsQueryable().GetEnumerator());
dbSet.Setup(d => d.Add(It.IsAny<Search>())).Callback<Search>(_searches.Add);
_dataContextMock = new Mock<IdentityDataContext>()
{
CallBase = true
};
// The error appears here ---------------- _
dataContextMock.Setup(x => x.Searches).Returns(dbSet.Object);
//----------------------------------------------------------------------
_dataContextMock.Setup(x => x.Set<Search>()).Returns(dbSet.Object);
_searchRepository = new SearchRepository(_dataContextMock.Object);
}
Что мне не хватает?
Спасибо за это. Это подход, о котором я не думал. Я прочитал эту статью [https://msdn.microsoft.com/en-us/library/dn314429 (v = vs.113) .aspx # Anchor_7) в MSDN. Мне интересно, почему этот другой подход не мог работать в моем случае? В основном, они используют Сервис, когда я реализую шаблоны репозитория и единицы дизайна работы. Но они имеют ту же цель: управлять моделями. Я ошибаюсь ? – BertrandD