Ускорение LocalSessionFactoryBean dropDatabaseSchema, createDatabaseSchema
Мне интересно, как я могу ускорить свои модульные тесты. Я использую JUnit, и перед каждым тестом я отбрасываю схему базы данных,а затем воссоздаю ее. Поскольку моя схема несколько велика, это может занять довольно много времени, учитывая, что у меня есть более 1000 тестов.
Чтобы дать вам представление о моей установке: Весна 3 hibernate3.LocalSessionFactoryBean, который использует диалект HSQL. Я использую программу Junit's Suite runner для запуска списка классов.
Я заметил, что весна имеет SpringJunit4ClassRunner, который понимает аннотации транзакций,но не аннотации набора. Я обошел эту проблему, и теперь предпринимаются попытки отката, но они, похоже, вызывают бесконечную рекурсию, которая приводит к StackOverflow.
Я относительно новичок в Spring, и все это магия, но мне просто интересно, есть ли у кого-нибудь идеи относительно StackOverflow или какие-либо другие идеи в ускорении тестирования?Может быть, я мог бы записать в файл чистое состояние БД и постоянно перезаряжайте его после каждого теста, хотя я не уверен, что это возможно.
Заранее благодарю.
2 ответа:
HSQLDB 2.2.6 поддерживает оператор для очистки данных в схеме базы данных.
TRUNCATE SCHEMA PUBLIC AND COMMIT
Смотрите руководство ЗДЕСЬ:
Http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_truncate_statement
Версия 2.2.7 и более поздние версии поддерживают
TRUNCATE SCHEMA PUBLIC RESTART IDENTITY AND COMMIT
Если требуется время для создания схемы, воспользуйтесь предложением фредта.
Если создание данных требует времени (а не схемы), то я бы пошел на ваше последнее предложение, чтобы создать "стандартную" базу данных, которая используется для всех ваших тестов, по крайней мере, в качестве базы. Именно этим я и занимаюсь в некоторых своих проектах.У меня есть база данных.файл скрипта где-то в моем исходном дереве. В моей тестовой установке
@Before
я копирую файл во временный каталог. Моя весна конфигурация указывает на эту копию. Копия позволяет избежать изменения стандартной базы данных. Затем в@After
я делаю shutdown и удаляю файл [*]. Использование@Before
и@After
- это боль, если у вас везде один и тот же код, поэтому посмотрите на ExternalResource, который является Теструлом, который позволяет реализовать логику до/после, но в хорошем, факторизованном виде.Если я использую maven, целью для копии обычно является target / temp / something. Таким образом, все копии будут удалены с помощью
mvn clean
.[*] это хорошо работает под linux, но под windows файлы иногда не удаляются, поэтому я либо перемещаю файл на временное имя, либо использую один файл на тест. Вы можете получить имя, используя правилоTestName .