is
- тестирование идентичности, ==
- тестирование равенства (см. Документация Python ).
В большинстве случаев, если a is b
, то a == b
. Но есть исключения, например:
>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False
Таким образом, вы можете использовать is
для тестирования идентичности, никогда не проводить тесты равенства.
База данных памяти SQLite только существует, пока соединение с нею остается открытым. Использовать его в модульных тестах с NHibernate:
1. Откройте ISession в начале своего теста (возможно, в [Установка] метод).
2. Используйте соединение от той сессии в Вашем вызове SchemaExport.
3. Используйте ту же самую сессию в своих тестах.
4. Закройте сеанс в конце своего теста (возможно, в [Разрушение] метод).
Мы используем SQLite в памяти для всех наших тестов базы данных. Мы используем единственное соединение ADO для тестов, которое снова используется для всех сессий NH, открытых тем же тестом.
Это позволяет также запускать тесты с несколькими включенными сессиями. SessionFactory также создается однажды для всех тестов, потому что чтение отображающихся файлов занимает некоторое время.
<час>Редактирование
Начиная с Системы. Данные. Sqlite 1.0.82 (или Sqlite 3.7.13 ), существует Общий Кэш , который позволяет нескольким соединениям совместно использовать те же данные, также для базы данных In-Memory . Это позволяет создание базы данных в оперативной памяти в одном соединении, и используйте его в другом. (Я еще не попробовал его, но в теории, это должно работать):
file::memory:?cache=shared
У меня было много от проблем с базой данных памяти SQLite. Таким образом, теперь мы используем SQLite, работающий с файлами на ramdrive диске.
Просто произвольное предположение, но sql производится NHibernate использование команды, неподдерживаемой sqlite?
кроме того, Что происходит, если Вы используете файл вместо памяти? (Система. IO.Path. GetTempFileName () работал бы, я думаю...)
Я делаю его с Носорог палата общин . Если Вы не хотите использовать Носорога палата общин, можно учиться, источник действительно видят, как это делает это. Единственная проблема, которую я имел, состоит в том, что SQLite не поддерживает вложенные транзакции. Это вынудило меня изменить свой код для поддержки интеграционного тестирования. Интеграционное тестирование с в базе данных памяти является настолько потрясающим, я решил, что это был справедливый компромисс.