Я пытаюсь написать тесты, используя Entity Framework Core UseInMemoryDatabase, поэтому мои настройки выглядят так:
[SetUp]
public void Setup()
{
this.ContextOptions = new DbContextOptionsBuilder<GeneralContext>()
.UseInMemoryDatabase(databaseName: "DiagAc2Tests")
.Options;
}
Я не знаю, нужно ли это, но контекст выглядит так:
public class GeneralContext : DbContext
{
public DbSet<Entities.Application> Applications { get; set; }
public GeneralContext() { }
public GeneralContext(DbContextOptions<GeneralContext> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var config = new DatabaseConfiguration();
optionsBuilder.UseNpgsql(config.GetConnectionString());
}
}
Я использую этот контекст в своем приложении, и он работает, поэтому мой тест выглядит следующим образом:
public async Task CreateApplicationByService()
{
Mock<DTO.IApplication> mock = new Mock<DTO.IApplication>();
mock.SetupProperty(f => f.Name, "Application");
mock.SetupProperty(f => f.ProjectId, 666);
mock.SetupProperty(f => f.ConfigFilePath, null);
DTO.IApplication appDto = mock.Object;
var entity = this.Mapper.Map<DTO.IApplication, Application>(appDto);
try
{
using var context = new GeneralContext(this.ContextOptions);
await context .ApplicationRepository.Add(entity);
}
catch (Exception ex)
{
var t = ex;
}
var one = 1;
var two = 2;
Assert.True(one != two);
}
У меня нет никаких утверждений, поэтому добавляется это глупое утверждение, но когда я добавляю запись через Я получаю контекст:
Службы для поставщиков баз данных 'Microsoft.EntityFrameworkCore.InMemory', 'Npg sql .EntityFrameworkCore. PostgreSQL' зарегистрированы в поставщике услуг. Только один поставщик базы данных может быть зарегистрирован в поставщике услуг. Если возможно, убедитесь, что Entity Framework управляет своим поставщиком услуг, удалив вызов UseInternalServiceProvider. В противном случае рассмотрите возможность условной регистрации поставщика базы данных или поддержки одного поставщика услуг для каждого поставщика базы данных.
Я сделал все в соответствии с документацией по MSDN, поэтому что может быть не так?