Как и классу Main, BookIT в листинге 4.9 необходимо создать экземпляр EntityManager с использованием EntityManagerFactory. Для инициализации этих компонентов можно прибегнуть к фикстурам JUnit 4. Аннотации @Before и @After позволяют выполнять некоторый код до и после выполнения теста. Это идеальное место для создания и закрытия экземпляра EntityManager и получения транзакции.

Вариант тестирования shouldFindJavaEE7Book() опирается на информацию, которая уже присутствует в базе данных (подробнее о сценарии inset.sql мы поговорим позднее), и при поиске Book с идентификатором 1001 мы убеждается в том, что названием является "Изучаем Java EE 7". Метод shouldCreateH2G2Book() обеспечивает постоянство Book (с помощью метода EntityManager.persist()) и проверяет, был ли идентификатор автоматически сгенерирован EclipseLink (с использованием assertNotNull). Если да, то выполняется именованный запрос и осуществляется проверка, является ли "Автостопом по Галактике" описанием возвращенной сущности Book. Последний вариант тестирования создает Book с атрибутом Nulltitle, обеспечивает постоянство Book и удостоверяется в том, что было сгенерировано исключение ConstraintViolationException.

<p>Написание единицы сохраняемости</p>

Как вы можете видеть в классе Main (см. листинг 4.8), EntityManagerFactory требуется единица сохраняемости с именем chapter04PU. А для интеграционного теста BookIT (см. листинг 4.9) используется другая единица сохраняемости (chapter04TestPU). Эти две единицы сохраняемости должны быть определены в файле persistence.xml, находящемся в каталоге src/main/resources/META-INF (листинг 4.10). Этот файл, необходимый согласно спецификации JPA, важен, поскольку соединяет поставщика JPA (которым в нашем случае выступает EclipseLink) с базой данных (Derby). Он содержит всю информацию, необходимую для подключения к базе данных (URL-адрес, JDBC-драйвер, сведения о пользователе, пароль), и сообщает поставщику режим генерирования схемы базы данных (drop-and-create означает, что таблицы будут удалены, а затем снова созданы). Элемент определяет поставщика постоянства, которым в нашем случае является EclipseLink. Единицы сохраняемости позволяют узнать обо всех сущностях, которыми должен управлять менеджер сущностей. Здесь в теге предусмотрена ссылка на сущность Book.

Две единицы сохраняемости отличаются в том смысле, что chapter04PU использует работающую базу данных Derby, а chapter04TestPU — ту, что располагается в оперативной памяти. Обратите внимание, что они обе задействуют сценарий inset.sql для ввода информации в базу данных во время выполнения.

Листинг 4.10. Файл persistence.xml

·············xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

·············xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 

·············http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"

·············version="2.1">

··

····org.eclipse.persistence.jpa.PersistenceProvider

····org.agoncal.book.javaee7.chapter04.Book

····

······

value="drop-and-create"/>

······

················value="database-and-scripts"/>

······

················value="org.apache.derby.jdbc.ClientDriver"/>

······

················value="jdbc: derby://localhost:1527/chapter04DB;create=true"/>

······

······

······

value="insert.sql"/>

····

··

··

····org.eclipse.persistence.jpa.PersistenceProvider

····org.agoncal.book.javaee7.chapter04.Book

····

······

value="drop-and-create"/>

······

value="database"/>

······

················value="org.apache.derby.jdbc.EmbeddedDriver"/>

······

················value="jdbc: derby: memory: chapter04DB;create=true"/>

······

value="insert.sql"/>

····

··

<p>Написание SQL-сценария для загрузки данных</p>
Перейти на страницу:

Похожие книги