Использование разных баз данных InMemory по-прежнему повышает идентичность - PullRequest
0 голосов
/ 12 сентября 2018

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

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

Например, у меня есть 2 модульных теста:

[Test]
public async Task CanGetAllFromRepository()
{
    var options = new DbContextOptionsBuilder<MyContext>()
        .UseInMemoryDatabase(databaseName: "CanGetAllFromRepository").Options;
    var testa = new User();
    var testb = new User();
    var testc = new User();

    using (var context = new MyContext(options))
    {
        await context.Users.AddAsync(testa);
        await context.Users.AddAsync(testb);
        await context.Users.AddAsync(testc);
        await context.SaveChangesAsync();
    }

    using (var context = new MyContext(options))
    {
        var repo = new UserRepository(context);
        var all = await repo.GetAllAsync();
        Assert.IsTrue(all.Count == 3);
    }
}

[Test]
public async Task CanGetByIdFromRepository()
{
    var options = new DbContextOptionsBuilder<MyContext>()
        .UseInMemoryDatabase(databaseName: "CanGetByIdFromRepository").Options;
    var testa = new User();
    var testb = new User();
    var testc = new User();

    using (var context = new SalesPortalContext(options))
    {
        await context.User.AddAsync(testa);
        await context.User.AddAsync(testb);
        await context.User.AddAsync(testc);
        await context.SaveChangesAsync();
    }

    using (var context = new MyContext(options))
    {
        var repo = new UserRepository(context);
        var usera = await repo.GetByIdAsync(1);
        var userb = await repo.GetByIdAsync(2);
        var userc = await repo.GetByIdAsync(3);

        Assert.IsNotNull(usera);
        Assert.IsNotNull(userb);
        Assert.IsNotNull(userc);
    }
}

Если я запускаю тесты 1 на 1, это не проблема, но их все вместе; затем для 2-го модульного теста идентификаторы набора идентификаторов пользователей начинают с 4, 5, 6. (При индивидуальном запуске его 1, 2, 3, как и ожидалось).

UPDATE

Мне удалось обойти проблему, вручную назначив Пользователям их идентификаторы, например:

var testa = new User() { Id = 1 };
var testb = new User() { Id = 2 };
var testc = new User() { Id = 3 };

Ответы [ 2 ]

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

Похоже, это открытая проблема на EF GitHub: https://github.com/aspnet/EntityFrameworkCore/issues/6872

0 голосов
/ 14 сентября 2018

Я делаю то же самое с XUnit , и это работа для меня.XUnit запускает конструктор для каждого теста, и при инициализации контекста проблем не возникает.Попробуйте использовать его

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