Проблема здесь в том, что ваши тесты используют общее состояние.
(Кстати, если вам когда-нибудь интересно, почему многие программисты пойдут на все, чтобы избежать использования чего-либо static
, и вы чувствуете,их объекты, инъекции зависимостей и т. д. слишком сложны, когда они могут просто «сделать его статичным» ... Вот почему.)
Ваш Initializer
может , вероятно, останется static
До тех пор, пока это не поддерживает внутренне состояние.На что это не похоже, по крайней мере, с первого взгляда, поскольку вы передаете ему экземпляр контекста базы данных.Но так как вы продолжаете работать в своей системе, важно убедиться, что этот инициализатор не поддерживает само состояние по всем тестам.
Это затем приводит нас к самой базе данных в памяти:
o.UseInMemoryDatabase("testDb");
Они доступны по всему приложению. Но вы можете дать им уникальные имена.Например:
var dbName = Guid.NewGuid().ToString();
o.UseInMemoryDatabase(dbName);
При этом у каждого контекста БД должна быть уникальная база данных, на которую вы позже сможете ссылаться с dbName
везде, где это может понадобиться.Таким образом, несмотря на то, что все базы данных технически доступны во всем мире, любой данный тест знает только о своих собственных и может ссылаться только на свои собственные.
(Конечно, следите за производительностью. Если вы создаете большие сложные базы данных, чего не следует делать для небольших индивидуальных тестов, тогда создание множества этих баз данных может замедлить процесс.)