Можете ли вы создать отдельную базу данных Hibernate в памяти для каждого потока (для тестирования)? - PullRequest
0 голосов
/ 29 августа 2018

Я реализовывал интерфейсы Hibernate и JPA для тестирования, подкрепленного картой карт. Эта структура данных делает действительно простую «базу данных»:

// All my database classes implement this (Kotlin) interface.
// "Idd" means "having an ID" as in "ID'd"
interface Idd {
    val id: Long
}

// This simple data structure works as an in-memory database.
//
// The Class is the name of the mapped entity class (which extends Idd)
//
// The inner map uses the ID as the key and the actual objects as
// the value.
//
// ID's are assigned by looking up the Class in the outer map
// and adding one to the size of the inner map (in a synchronized block).
map: SortedMap<Class<Idd>,
               MutableMap<Long, Idd>>

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

Это прекрасно работает (это был своего рода прорыв в моем тестировании), но соответствующие классы Hibernate / JPA имеют много методов и довольно сильно меняются между версиями Hibernate.

Я слышал, что Hibernate поставляется с базой данных в памяти. Может ли это использоваться с отдельной базой данных для каждого потока для тестирования? Пример был бы великолепен!

P.S. Я использую Sorted / Tree-Map, потому что могу распечатать ее в надежном порядке для отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...