Изучаем Java EE 7 - [58]
>public class BookIT {
>··private static EntityManagerFactory emf =
>·················Persistence.createEntityManagerFactory("chapter04TestPU");
>··private EntityManager em;
>··private EntityTransaction tx;
>··@Before
>··public void initEntityManager() throws Exception {
>····em = emf.createEntityManager();
>····tx = em.getTransaction();
>··}
>··@After
>··public void closeEntityManager() throws Exception {
>····if (em!= null) em.close();
>··}
>··@Test
>··public void shouldFindjavaee7Book() throws Exception {
>····Book book = em.find(Book.class, 1001L);
>····assertEquals("Изучаем Java EE 7", book.getTitle());
>··}
>··@Test
>··public void shouldCreateH2G2Book() throws Exception {
>····// Создает экземпляр Book
>····Book book = new Book("H2G2", "Автостопом по Галактике",
>····12.5F, "1-84023-742-2", 354, false);
>····// Обеспечивает постоянство Book в базе данных
>····tx.begin();
>····em.persist(book);
>····tx.commit();
>····assertNotNull("ID не может быть пустым", book.getId());
>····// Извлекает информацию обо всех соответствующих книгах из базы данных
>····book = em.createNamedQuery("findBookH2G2", Book.class). getSingleResult();
>····assertEquals("Автостопом по Галактике", book.getDescription());
>··}
>··@Test(expected = ConstraintViolationException.class)
>··public void shouldRaiseConstraintViolationCauseNullTitle() {
>····Book book = new Book(null, "Пустое название, ошибка", 12.5F,
>····"1-84023-742-2", 354, false);
>····em.persist(book);
>··}
>}
Как и классу 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.
Написание единицы сохраняемости
Как вы можете видеть в классе 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 означает, что таблицы будут удалены, а затем снова созданы). Элемент
Две единицы сохраняемости отличаются в том смысле, что chapter04PU использует работающую базу данных Derby, а chapter04TestPU — ту, что располагается в оперативной памяти. Обратите внимание, что они обе задействуют сценарий inset.sql для ввода информации в базу данных во время выполнения.
>
>
>·············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">
>··
>····
>····
>····
>······
>value="drop-and-create"/>
>······
>················value="database-and-scripts"/>
>······
>················value="org.apache.derby.jdbc.ClientDriver"/>
>······
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.