Как имитировать класс Generics, который фактически использовался для извлечения данных из базы данных ⇐ C#
Как имитировать класс Generics, который фактически использовался для извлечения данных из базы данных
У меня есть базовый класс, в котором я могу найти различные универсальные методы, например
публичный класс EntityRepositoryBase: IDisposable, IEntityRepository где T: класс { //Контекст — это класс DbContext приложения общедоступный контекст DataContext { получить {вернуться Context.GetContext(); } } общедоступный виртуальный IQueryable GetAll() { вернуть DataContext.Set().AsQueryable(); } public virtual bool Any (предикат Expression) { вернуть DataContext.Set().Any(предикат); } Я хочу имитировать этот DataContext (который связан с реальной базой данных) с помощью контекста базы данных в памяти, чтобы я мог написать различные тесты для следующего метода.
публичный список GetPlantData() { List lstEntity = новый список(); используя (var PlantTypeRepo = новый EntityRepositoryBase()) { // Немного логики... lstEntity = PlantTypeRepo.ToList(); } вернуть LstEntity; } Я добавил свой собственный класс DbContext только для модульных тестов
общедоступный класс MyTestDbContext: DbContext { public MyTestDbContext(DbContextOptions options): base(options) { } общественный DbSet PlantTypes {get; набор; } } В тестовом классе что-то вроде этого
публичный класс MasterDataManagerTests { частный только для чтения DbContextOptions _options; общедоступный MasterDataManagerTest() { // Настройка параметров базы данных в памяти _options = новый DbContextOptionsBuilder() .UseInMemoryDatabase(имябазы данных: "MyTestDb") .Параметры; } [Теория] [InlineData("PLANT_TYPE1")] public void MasterDataManager_GetAllMasterData_ReturnPlantList (строка screenCode) { // Договариваться вар контекст = новый MyTestDbContext (_options); context.PlantTypes.Add(new PlantType { PlantType_ID = 123, Code = "Code1", Name = "ABC", ValidStartDate = DateTime.Now, ValidEndtDate = DateTime.Now}); context.PlantTypes.Add(new PlantType { PlantType_ID = 456, Code = "Code2", Name = "XYZ", ValidStartDate = DateTime.Now, ValidEndtDate = DateTime.Now}); context.SaveChanges(); вар dbRepo = новый EntityRepositoryBase() {}; dbRepo.DataContext = новый GaiaTestDbContext(_options); // Действовать } Но я не могу имитировать реальный dbcontext с помощью dbcontext в памяти. Это показывает, что я не могу присвоить значение dbRepo.DataContext
У меня есть базовый класс, в котором я могу найти различные универсальные методы, например
публичный класс EntityRepositoryBase: IDisposable, IEntityRepository где T: класс { //Контекст — это класс DbContext приложения общедоступный контекст DataContext { получить {вернуться Context.GetContext(); } } общедоступный виртуальный IQueryable GetAll() { вернуть DataContext.Set().AsQueryable(); } public virtual bool Any (предикат Expression) { вернуть DataContext.Set().Any(предикат); } Я хочу имитировать этот DataContext (который связан с реальной базой данных) с помощью контекста базы данных в памяти, чтобы я мог написать различные тесты для следующего метода.
публичный список GetPlantData() { List lstEntity = новый список(); используя (var PlantTypeRepo = новый EntityRepositoryBase()) { // Немного логики... lstEntity = PlantTypeRepo.ToList(); } вернуть LstEntity; } Я добавил свой собственный класс DbContext только для модульных тестов
общедоступный класс MyTestDbContext: DbContext { public MyTestDbContext(DbContextOptions options): base(options) { } общественный DbSet PlantTypes {get; набор; } } В тестовом классе что-то вроде этого
публичный класс MasterDataManagerTests { частный только для чтения DbContextOptions _options; общедоступный MasterDataManagerTest() { // Настройка параметров базы данных в памяти _options = новый DbContextOptionsBuilder() .UseInMemoryDatabase(имябазы данных: "MyTestDb") .Параметры; } [Теория] [InlineData("PLANT_TYPE1")] public void MasterDataManager_GetAllMasterData_ReturnPlantList (строка screenCode) { // Договариваться вар контекст = новый MyTestDbContext (_options); context.PlantTypes.Add(new PlantType { PlantType_ID = 123, Code = "Code1", Name = "ABC", ValidStartDate = DateTime.Now, ValidEndtDate = DateTime.Now}); context.PlantTypes.Add(new PlantType { PlantType_ID = 456, Code = "Code2", Name = "XYZ", ValidStartDate = DateTime.Now, ValidEndtDate = DateTime.Now}); context.SaveChanges(); вар dbRepo = новый EntityRepositoryBase() {}; dbRepo.DataContext = новый GaiaTestDbContext(_options); // Действовать } Но я не могу имитировать реальный dbcontext с помощью dbcontext в памяти. Это показывает, что я не могу присвоить значение dbRepo.DataContext
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение