Я думаю, что лучший ответ в подобных ситуациях - очень тщательно подумать о том, что вы пытаетесь проверить.В идеале модульный тест должен пытаться проверить один факт об одном методе или функции.Когда вы начинаете объединять многие вещи вместе, они переходят в мир интеграционных тестов (которые одинаково ценны, но различны).
Для целей модульного тестирования, чтобы дать вам возможность протестировать только то, что вы хотите протестировать,вам нужно будет проектировать для тестирования .Обычно это включает в себя дополнительное использование интерфейсов (я предполагаю, что .NET из кода, который вы показали) и некоторую форму внедрения зависимостей (но не требует контейнера IoC / DI, если вы этого не хотите).Он также извлекает выгоду и поощряет вас создавать очень сплоченные (одноцелевые) и разобщенные (мягкие зависимости) классы в вашей системе.
Поэтому, когда вы тестируете бизнес-логику, которая зависит от данных из базы данных, вы должныобычно используют что-то вроде Repository Pattern и вводят fake / stub / mock IXXXRepository для модульного тестирования.Когда вы тестируете конкретный репозиторий, вам нужно либо выполнить тот тип очистки базы данных, о котором вы спрашиваете, либо вам нужно подкрутить / заглушить базовый вызов базы данных.Это действительно ваше дело.
Когда вам действительно нужно создать / заполнить / очистить базу данных, вы можете рассмотреть возможность использования различных методов настройки и демонтажа, доступных в большинстве сред тестирования.Но будьте осторожны, потому что некоторые из них запускаются до и после каждого теста, что может серьезно повлиять на производительность ваших модульных тестов.Тесты, которые выполняются слишком медленно, будут выполняться не очень часто, и это плохо.
В MS-Test вы можете использовать следующие атрибуты для объявления установки / разрыва: ClassInitialize , ClassCleanUp , TestInitialize , TestCleanUp .Другие фреймворки имеют конструкции с аналогичными именами.
Существует ряд фреймворков, которые могут помочь вам с насмешками / заглушками: Moq , Rhino Mocks , NMock, TypeMock , Кроты и заглушки (VS2010), VS11 Подделки (VS11 Beta) и т. Д. Если вы ищете платформы внедрения зависимостей, посмотритена такие вещи, как Ninject , Unity , Castle Windsor и т. д.