Проблема с помощью SQLite: память: с NHibernate

is - тестирование идентичности, == - тестирование равенства (см. Документация Python ).

В большинстве случаев, если a is b, то a == b. Но есть исключения, например:

>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False

Таким образом, вы можете использовать is для тестирования идентичности, никогда не проводить тесты равенства.

33
задан Chris Canal 10 October 2008 в 14:56
поделиться

5 ответов

База данных памяти SQLite только существует, пока соединение с нею остается открытым. Использовать его в модульных тестах с NHibernate:
1. Откройте ISession в начале своего теста (возможно, в [Установка] метод).
2. Используйте соединение от той сессии в Вашем вызове SchemaExport.
3. Используйте ту же самую сессию в своих тестах.
4. Закройте сеанс в конце своего теста (возможно, в [Разрушение] метод).

41
ответ дан 27 November 2019 в 17:51
поделиться

Мы используем SQLite в памяти для всех наших тестов базы данных. Мы используем единственное соединение ADO для тестов, которое снова используется для всех сессий NH, открытых тем же тестом.

  1. Перед каждым тестом: создайте соединение
  2. , Создают схему на этом соединении
  3. Запущенный тест. То же соединение используется для всех сессий
  4. После теста: близкое соединение

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

<час>

Редактирование

Использование Общего Кэша

Начиная с Системы. Данные. Sqlite 1.0.82 (или Sqlite 3.7.13 ), существует Общий Кэш , который позволяет нескольким соединениям совместно использовать те же данные, также для базы данных In-Memory . Это позволяет создание базы данных в оперативной памяти в одном соединении, и используйте его в другом. (Я еще не попробовал его, но в теории, это должно работать):

  • Изменение строка подключения к file::memory:?cache=shared
  • Открывает соединение и создает схему
  • , Сохраняют это соединение открытым, пока конец теста
  • Не Позволил NH создать другие соединения (нормальное поведение) во время теста.
9
ответ дан 27 November 2019 в 17:51
поделиться

У меня было много от проблем с базой данных памяти SQLite. Таким образом, теперь мы используем SQLite, работающий с файлами на ramdrive диске.

1
ответ дан 27 November 2019 в 17:51
поделиться

Просто произвольное предположение, но sql производится NHibernate использование команды, неподдерживаемой sqlite?

кроме того, Что происходит, если Вы используете файл вместо памяти? (Система. IO.Path. GetTempFileName () работал бы, я думаю...)

0
ответ дан 27 November 2019 в 17:51
поделиться

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

0
ответ дан 27 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

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