Ясная база данных NHibernate быстро

Я использую NHibernate для ORM, и все хорошо работает.

Теперь я начал писать некоторые модульные тесты (использующий DB, я не хочу помещать tooo много усилия в абстракцию этого далеко, я знаю не прекрасный, но это работает..).

Я должен быть уверен, что DB completly пустой для некоторых тестов. Я могу, конечно, создать целый DB. Но это, кажется, излишество, и я думаю, что оно занимает больше времени...

Существует ли команда DELETE_ALL, которая очищает все таблицы, я могу использовать в NHibernate?

Chris

Править: Короткое обновление, я решил пойти путем SQLite, без проблем для изменения этого с NHibernate. Существуют некоторые ловушки, я использую эту конфигурацию, и она работает. Иначе Вы могли бы получить "таблицу, не найденную" ошибки, из-за nHibernate закрытие соединения в то время как на сессии, приводящей к "потерянной" базе данных...

Для Вашего удобства: Копия и вставка...

.Database(SQLiteConfiguration.Standard.ConnectionString("Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;")  
                       .Raw("connection.release_mode", "on_close"))
                        .Mappings(obj => obj.AutoMappings.Add(_config.APModel));
5
задан Beatles1692 16 October 2012 в 07:45
поделиться

5 ответов

Удалите и заново создайте базу данных. Вы можете воспользоваться экспортом схемы:

var export = new SchemaExport(config);
export.Drop(false, true);
export.Create(true, true);

Sql lite в памяти работает быстрее для тестов, чем "обычная" база данных, но недостатком является то, что диалект sql-lite может отличаться от диалекта sql в production.

9
ответ дан 18 December 2019 в 16:36
поделиться

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

Часть вашей тестовой инфраструктуры может запускать сценарий sql, который выполняет одно из следующих действий:

  1. Отбросить базу данных и воссоздать.
  2. Обрезать все таблицы.

В идеале вам нужно немного поработать, чтобы абстрагироваться от базы данных, тем более, что у вас есть NH, который делает это намного проще, чем некоторые другие фреймворки.

1
ответ дан 18 December 2019 в 16:36
поделиться

Я бы порекомендовал вам проверить ndbunit . Это не относится к NHibernate, но я использовал его для тестирования проектов NHibernate в прошлом, и он хорошо работает. По сути, он предоставляет функции для очистки базы данных, предварительного заполнения ее тестовыми данными или восстановления ее до известных состояний после каждого теста. Вам просто нужно предоставить XSD схемы базы данных и, возможно, некоторые данные XML для предварительного заполнения.

Кажется, я впервые увидел это в серии скринкастов Summer of NHibernate , так что посмотрите их, чтобы увидеть, как это работает.

2
ответ дан 18 December 2019 в 16:36
поделиться

Используйте базу данных в памяти, такую ​​как SQLite, и настраивайте в ней необходимые данные перед каждым тестом. Первоначальная настройка занимает немного времени, но впоследствии каждый тест выполняется очень быстро, и вы можете быть уверены, что начинаете с чистого листа. У Айенде есть несколько сообщений в блоге о том, как это настроить.

0
ответ дан 18 December 2019 в 16:36
поделиться

На случай, если Drop/Create DB не подходит для ваших нужд (например, если БД содержит объекты, о которых NHibernate не знает, такие как SPs, функции и т.д.), вы всегда можете сделать резервную точку с пустой БД и после завершения тестирования просто восстановить ее

.
0
ответ дан 18 December 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: