Утечка данных в базе данных EF Core In Memory между юнит-тестами - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь смоделировать свою базу данных EF-Core, используя провайдера оперативной памяти, как описано здесь: https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/in-memory.

Я структурировал свои тесты так:

[Test]
public async Task PerformTest1() {
  var options = new DbContextOptionsBuilder<MeldingenModel>()
    .UseInMemoryDatabase(nameof(PerformTest1))
    .Options;
  var protos = new List<MeldingPrototype> { ... };
  var meldingen = new List<Melding> { ... };
  using (var seedingcontext = new MeldingenModel(options)) {

    seedingcontext.MeldingPrototypes.AddRange(protos);
    seedingcontext.Meldingen.AddRange(meldingen);
    seedingcontext.SaveChanges();
  }
  using (var db = new MeldingenModel(options))
  using (var mock = AutoMock.GetLoose(cgf => cgf.RegisterInstance(db))) {

    // do test
  }
}

Первый раздел - ввод данных в базу данных. Каждый тест имеет похожий шаблон, и каждый использует nameof(<methodname>) в качестве аргумента UseInMemoryDatabase. Насколько я понимаю, строки документации этого метода, различные строковые аргументы должны гарантировать, что все созданные базы данных разделены, но, похоже, они все еще влияют друг на друга. Если я запускаю каждый тест по отдельности, они все проходят, но если их запускать одновременно, они не проходят. Причина сбоя заключается в том, что начальные данные одного метода также присутствуют во время других тестов.

Я использую тестовый фреймворк nUnit.

Может кто-нибудь помочь мне получить правильно изолированные тестовые базы данных?

1 Ответ

1 голос
/ 03 апреля 2020

Я стараюсь сделать следующее, чтобы убедиться, что у меня действительно есть отдельная база данных для каждого модульного теста.

public class MyTestClass
{
  [Test]
  public async Task PerformTest1()
  {
    var options = new DbContextOptionsBuilder<MeldingenModel>()
      .UseInMemoryDatabase($"{ nameof(MyTestClass) }.{ nameof(PerformTest1) }")
      .Options;
  }
}

Я вижу, что вы уже решили свою проблему. Но все же это хорошая практика, чтобы быть уверенным в уникальности имен баз данных.

Cheers, Mike

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...