Moq и настройка контекста БД - PullRequest
0 голосов
/ 15 октября 2018

У меня есть файл контекста БД Entity Framework.Я пытаюсь настроить инфраструктуру Moq в NUnit.В настоящее время получаю ошибку ниже для теста Moq Nunit.Как настроить DBContext и добавить элементы в таблицу продуктов?

"Поставщик базы данных не настроен для этого DbContext. Поставщик может быть настроен путем переопределения метода DbContext.OnConfiguring или с помощью AddDbContext впоставщик услуг приложения. Если используется AddDbContext, то также убедитесь, что ваш тип DbContext принимает объект DbContextOptions в своем конструкторе и передает его базовому конструктору для DbContext. "

Файл контекста БД электроники

public partial class ElectronicsContext : DbContext
{
    public ElectronicsContext()
    {
    }

    public ElectronicsContext(DbContextOptions<ElectronicsContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Product> Product { get; set; }
    public virtual DbSet<ProductCategory> ProductCategory { get; set; }

Startup.cs

    var connection = @"Server=localhost;Database=Electronics;Trusted_Connection=True;ConnectRetryCount=0";
    services.AddDbContext<ElectronicsContext>(options => options.UseSqlServer(connection));

Тест Moq Nunit

 [SetUp]
 public void Setup()
 {
    var ElectronicsContext = new Mock<ElectronicsContext>();
    var ProductRepository = new Mock<ProductRepository>();

    Product producttest = new Product();
    _dbContext.Product.Add(new Product {ProductId = 1, ProductName = "TV", ProductDescription = "TV testing",ImageLocation = "test"});
    _dbContext.SaveChanges();

1 Ответ

0 голосов
/ 15 октября 2018

Вам не нужно высмеивать контекст в модульных тестах.Вы должны использовать класс DbContextOptions, чтобы указать, что вы хотите использовать базу данных в памяти для выполнения ваших тестов.

[TestMethod]
public void TestProducts()
{
    var options = new DbContextOptionsBuilder<ElectronicsContext>()
        .UseInMemoryDatabase(databaseName: "Products Test")
        .Options;

    using(var context = new ElectronicsContext(options))
    {
        context.Products.Add(new Product {ProductId = 1, ProductName = "TV", ProductDescription = "TV testing",ImageLocation = "test"});
        context.SaveChanges();
    }

    using(var context = new ElectronicsContext(options))
    {
        // run your test here

    }
}

Это работает против представления вашей базы данных в памяти вместо того, чтобы полагаться на физическую базу данных.сервер.Строка подключения, указанная вами в startup.cs, не используется как часть тестов.

Более подробную информацию можно найти здесь

...