Entity Framework Code First - тесты, накладывающиеся друг на друга - PullRequest
0 голосов
/ 15 января 2012

В моих интеграционных тестах используется живая БД, сгенерированная с использованием инициализаторов EF.Когда я запускаю тесты по отдельности, они запускаются, как и ожидалось.Однако, когда я запускаю их все сразу, я получаю много неудачных тестов.

У меня, похоже, происходит некоторое наложение.Например, у меня есть два теста, которые используют один и тот же метод настройки.Этот метод установки создает и заполняет БД.Оба теста выполняют один и тот же тест ACT, который добавляет несколько элементов в БД (те же элементы), но уникальным является то, что каждый тест ищет разные вычисления (вместо одного большого теста, который делает много вещей).

Один из способов, которым я мог бы решить эту проблему, - это сделать несколько хитростей в настройке, которая создает уникальную БД для каждого запускаемого теста, чтобы все оставалось изолированным.Однако, когда я это делаю, инициализация EF не работает, потому что она создает новую БД, а не отбрасывает и заменяет ее новой (последняя вызывает заполнение).?Похоже на организацию моих тестов ... просто не показать, как лучше всего это сделать, и искал вклад.На самом деле не нужно вручную запускать каждый тест.

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Используйте тестовую настройку и методы разрыва, предоставляемые вашей тестовой средой, запустите транзакцию в тестовой настройке и откатите транзакцию в тестовом анализе (пример для NUnit ). Вы даже можете поместить метод установки и демонтажа в базовый класс для всех тестов, и каждый тест после этого будет выполняться в своей собственной транзакции, которая выполнит откат в конце теста и переведет базу данных в исходное состояние.

0 голосов
/ 15 января 2012

Помимо того, что упомянул Ладислав, вы также можете использовать то, что называется Delta Assertion .

Например, предположим, что вы тестируете добавление нового Order в SUT.

Вы можете создать тест, который утверждает, что в конце теста в базе данных будет ровно 1 Order.

Но вы также можете создать дельта-утверждение, сначала проверив, сколько ордеров в базе данных в начале тестового метода. Затем, после добавления Order в SUT, вы проверяете, что в базе данных есть NumberOfOrdersAtStart + 1.

...