Я створив плагін для Symfony 1.4 (PHP), щоб вирішити цю проблему (серед інших). Він моделюється після того, як працює тестовий фреймворк Джанго (Python) : фреймворк будує та заповнює окрему тестову базу даних перед початком кожного тесту і знищує тестову базу даних після завершення кожного тесту.
У мене виникло кілька занепокоєнь щодо цієї стратегії, як щодо продуктивності (якщо схема не змінюється, чому б просто не очистити дані замість відновлення всієї структури?), Так і зручності (іноді я хочу перевірити базу даних після невдача тесту, тому не знищуйте його без розбору!), тому я взяв дещо інший підхід.
Перед першим запуском тесту база даних знищується та відновлюється, якщо в результаті зміни останнього тесту відбулися зміни моделі. Перед кожним наступним запуском тестування дані в базі даних очищаються, але структура не відновлюється (хоча за потреби тест може бути запущений вручну).
Вибірково завантажуючи світильники даних у кожному тесті, можна створити належне середовище для цього тесту, не втручаючись у наступні тести. Файли кріплення також можна повторно використовувати, що робить це завдання набагато менш обтяжливим (хоча це все ще є моєю найменш улюбленою частиною написання тестів!).
В обох тестових рамках адаптер бази даних налаштований для використання тестового з'єднання замість з'єднання "виробництво", щоб запобігти виконанню тесту з пошкодженням існуючих даних.