| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- |
| Copyright (c) 2009, 2010, 2011 Oracle and/or its affiliates. All rights reserved. |
| --> |
| |
| <html> |
| <head> |
| <title>Тестирование приложения Maven уровня предприятия</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > |
| <meta name="description" content="A tutorial on how to use NetBeans IDE to test a database connection in a Maven enterprise application."> |
| <link rel="stylesheet" href="../../../netbeans.css"> |
| <link rel="stylesheet" type="text/css" href="../../../lytebox.css" media="screen"> |
| <script type="text/javascript" src="../../../images_www/js/lytebox-compressed.js"></script> |
| <meta name="author" content="ken ganfield"> |
| |
| </head> |
| <body> |
| <h1>Тестирование приложения Maven уровня предприятия</h1> |
| |
| <p>This tutorial demonstrates how to test a simple enterprise application using IDE NetBeans and Maven archetypes. В ходе данного учебного курса вы создадите приложение уровня предприятия, содержащее класс сущности и сеансный компонент. Вы будете использовать·мастер для создания простого тестового класса для класса компонента, а затем запустите тестирование в среде IDE. Класс теста создаст экземпляр контейнера EJB, встроенного в GlassFish, для тестирования подключения к базе данных. |
| </p> |
| <p class="notes"><strong>Примечание.</strong> Если вы используете GlassFish 3.1.x, ознакомьтесь с разделом <a href="../../73/javaee/maven-entapp-testing.html">Тестирование корпоративного приложения Maven с помощью встроенного сервера GlassFish Server 3.1</a></p> |
| |
| <p><b>Упражнения по темам руководства</b></p> |
| <img alt="Содержимое на этой странице применимо к IDE NetBeans 7.4 и 8.0" class="stamp" src="../../../images_www/articles/74/netbeans-stamp-80-74.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.4 и 8.0"> |
| |
| <ul> |
| <li><a href="#intro">Использование Maven в среде IDE</a></li> |
| <li><a href="#Exercise_1">Создание приложения уровня предприятия</a> |
| <ul> |
| <li><a href="#Exercise_1a">Создание проекта веб-приложения</a></li> |
| <li><a href="#Exercise_1b">Создание класса сущностей</a></li> |
| <li><a href="#Exercise_1c">Создание сеансового компонента</a></li> |
| </ul> |
| </li> |
| <li><a href="#Exercise_2">Создание теста сеансного компонента</a></li> |
| <!-- <li><a href="#Exercise_3">Checking Code Coverage</a></li> |
| <li><a href="#Exercise_4">Downloading the Solution Project</a></li>--> |
| </ul> |
| |
| <p><b>Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.</b></p> |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Программное обеспечение или материал</th> |
| <th class="tblheader" scope="col">Требуемая версия</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">IDE NetBeans</a></td> |
| <td class="tbltd1">7.4, 8.0, комплект Java EE</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Комплект для разработчика на языке Java (JDK)</a></td> |
| <td class="tbltd1">версия 7 или 8</td> |
| </tr> |
| <tr> |
| <td class="tbltd1">GlassFish Server Open Source Edition 3.1.2.2</td> |
| <td class="tbltd1">4.0</td> |
| </tr> |
| </tbody> |
| </table> |
| <p class="notes"><strong>Примечание.</strong> Программа установки для GlassFish Server 3.1.1 включена в загружаемый пакет Java EE. You can install and register GlassFish as part of the IDE NetBeans installation process.</p> |
| <p><b>Предпосылки</b></p> |
| <p>Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:</p> |
| <ul> |
| <li>Программирование на Java</li> |
| <li>IDE NetBeans</li> |
| </ul> |
| |
| <p>Перед изучением этого учебного курса можно ознакомиться со следующей документацией:</p> |
| <ul> |
| <li><a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Испытанные приемы для Apache Maven в IDE NetBeans</a></li> |
| <li><a href="http://books.sonatype.com/mvnref-book/reference/introduction.html" target="_blank">Глава 1. Введение в Apache Maven</a> (из книги <a href="http://books.sonatype.com/mvnref-book/reference/index.html" target="_blank">Maven: The Complete Reference </a>)</li> |
| </ul> |
| <!-- <p class="tips">You can download <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJavaEE%252FMavenEnterpriseApp.zip">a zip archive of the finished project</a>.</p>--> |
| |
| <a name="intro"></a> |
| <!-- ===================================================================================== --> |
| <h2>Использование Maven в среде IDE</h2> |
| <p>Support for Maven is fully integrated in IDE NetBeans. Разработка проекта, в котором используется платформа Maven, практически идентична случаю разработки с использованием Ant. Однако в случае Maven имеются некоторые отличия, касающиеся способа сборки проектов и работы с зависимостями. Советы, приведенные ниже, могут помочь избегнуть ряда проблем при первом создании приложения Maven.</p> |
| |
| |
| <p class="tips"><strong>Проверка параметров Maven</strong></p> |
| <div class="indent"> |
| <p>Если это ваш первый проект Maven, проверьте параметры настройки Maven в окне "Параметры". Для работы с этим учебным курсом необходимо установить Maven на локальный компьютер. Maven включен в комплект IDE и устанавливается при установке среды IDE.</p> |
| |
| <ol> |
| <li>Откройте окно 'Настройки' в IDE (Сервис > Параметры; NetBeans> Предпочтения на Mac).</li> |
| <li>Выберите в окне "Параметры" категорию "Java" и перейдите на вкладку "Maven".</li> |
| <li>Подтвердите указание домашней страницы Maven. |
| <p>Можно использовать версию Maven, входящую в комплект среды IDE, либо указать местоположение локальной установки Maven (требуется версия 2.0.9 или более поздняя).</p></li> |
| <li>Для закрытия окна "Параметры" нажмите кнопку "ОК".</li> |
| </ol> |
| |
| <p class="notes"><strong>Примечания.</strong> Поддержка Maven автоматически включается при включении Java в среде IDE. Если нет, необходимо включить подключаемый модуль Java EE. |
| </div> |
| |
| <p class="tips"><strong>Обновите репозитории Maven</strong></p> |
| <div class="indent"> |
| <p>Локальные и удаленные репозитории Maven используются для автозавершения кода, а также при сборке проектов. Обновление индексов удаленных репозиториев Maven требуется для обеспечения немедленной доступности всех артефактов, которые могут потребоваться при разработке проекта. Частоту проверки наличия обновлений можно настроить на вкладке "Maven" в окне "Параметры" среды IDE. Вы можете выполнить немедленную проверку обновлений и проверку локальных и удаленных репозиториев Maven в окне 'Службы'.</p> |
| |
| <ol> |
| <li>Выберите меню "Окно" > "Службы". Откроется окно "Службы".</li> |
| <li>Разверните узел 'Репозитории Maven' в окне 'Службы'.</li> |
| <li>Щелкните правой кнопкой мыши узел репозитория и выберите во всплывающем меню 'Обновить индекс'.</li> |
| </ol> |
| |
| <p>При нажатии кнопки "Обновить индексы" в среде IDE выполняется проверка и загрузка самого свежего индекса для каждого из настроенных удаленных репозиториев Maven. Индекс представляет текущее состояние артефактов, расположенных в репозитории, и используется для предоставления ссылок на артефакты, доступных для использования в приложении. По умолчанию артефакты не загружаются из репозитория автоматически без явно обозначенной необходимости в них.</p> |
| |
| <p class="notes"><strong>Примечания.</strong></p> |
| <ul> |
| <li>Размер индексов довольно велик и обновление всех индексов может занять значительное время.</li> |
| |
| </ul> |
| </div> |
| |
| |
| <p class="tip">Дополнительные сведения об использовании Maven в IDE NetBeans см. в разделе <a href="https://netbeans.org/kb/docs/java/maven-hib-java-se.html#02">Настройка Maven</a> в учебном курсе <a href="https://netbeans.org/kb/docs/java/maven-hib-java-se.html">Создание приложения Swing Maven с помощью Hibernate</a>, а также в <a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Испытанные приемы для Apache Maven в IDE NetBeans</a>.</p> |
| |
| |
| <a name="Exercise_1"></a> |
| <!--Exercise 1: --> |
| <h2>Создание приложения уровня предприятия</h2> |
| <p>В данном разделе вы создадите простое веб-приложение, содержащее класс сущности и сеансный компонент, имеющий доступ к классу сущности.</p> |
| |
| <div class="indent"> |
| <a name="Exercise_1a"></a> |
| <h3>Создание проекта веб-приложения</h3> |
| <p>Цель этого упражнения заключается в создании веб-приложения Java EE на основе архетипа Maven с помощью мастера создания проектов. После создания проекта с помощью мастера необходимо указать GlassFish Server 3.1.1 в качестве целевого сервера.</p> |
| <ol> |
| <li>Выберите 'Файл' > 'Новый проект' (Ctrl-Shift-N; ⌘-Shift-N в Mac) в главном меню, чтобы открыть мастер создания проектов.</li> |
| <li>Выберите "Веб-приложение" в категории Maven. Нажмите кнопку "Далее".</li> |
| <li>Дайте проекту имя <strong>mavenwebtestapp</strong> и задайте местоположение проекта. Нажмите кнопку "Далее".</li> |
| <li>Выберите сервер GlassFish в раскрывающемся списке 'Сервер'.</li> |
| <li>Выберите Java EE 6 Web или Java EE 7 Web в списке 'Версия Java EE'. Нажмите кнопку "Готово".</li> |
| </ol> |
| <p>После нажатия кнопки "Готово" среда IDE создает веб-приложение и открывает проект в окне "Проекты".</p> |
| |
| <img alt="В окне 'Проекты' отображаются созданные проекты" class="margin-around b-all" src="../../../images_www/articles/73/javaee/maven-testing/maven-testing-projects.png" title="В окне 'Проекты' отображаются созданные проекты"> |
| |
| <p>Если развернуть узел проекта в окне 'Проекты', можно увидеть, что файл JAR <tt>javaee-web-api</tt> указан в качестве зависимости проекта, а JDK - в качестве зависимости Java. Среда IDE создала файл POM проекта <tt>pom.xml</tt>, и этот файл указан в списке в узле "Файлы проекта". |
| </p> |
| |
| <a name="Exercise_1b"></a> |
| <h3>Создание класса сущности</h3> |
| <p>В данном упражнении будет использован мастер создания файла для создания класса сущности. После создания класса сущности выберите в мастере источник данных <tt>jdbc/sampl</tt>. Нет необходимости создавать или регистрировать новый источник данных, поскольку источник данных <tt>jdbc/sample</tt> был зарегистрирован при установке сервера. |
| </p> |
| |
| <p class="notes"><strong>Примечание.</strong> Если необходимо создать новый источник данных или использовать другой источник данных, источник данных должен быть зарегистрирован на сервере до тестирования приложения, используя встроенный контейнер. При тестировании приложения с помощью встроенного контейнера среда IDE не зарегистрирует источник данных, в отличие от развертывания на экземпляре сервер GlassFish. |
| </p> |
| |
| <ol> |
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Класс сущности". |
| <p>В качестве альтернативы можно использовать 'Файл' > 'Создать файл' (Ctrl-N; ⌘-N в Mac) в главном меню и выбрать 'Класс сущности' в категории 'Сохраняемость'.</p></li> |
| <li>Введите <strong>MyEntity</strong> для имени класса.</li> |
| <li>Выберите <tt>com.mycompany.mavenwebtestapp</tt> в качестве пакета и установите тип первичного ключа <strong><tt>int</tt></strong>.</li> |
| <li>Подтвердите выбор "Создать единицу сохранения состояния". Нажмите кнопку "Далее".</li> |
| <li>Выберите <strong>jdbc/sample</strong> из раскрывающегося списка "Источник данных".</li> |
| <li>Подтвердите выбор "Использовать интерфейсы API транзакций Java" и выберите "Удалить и создать" в качестве стратегии создания таблицы. Нажмите кнопку 'Готово'.<br /> <img alt="В окне 'Проекты' отображаются созданные проекты" class="margin-around b-all" src="../../../images_www/articles/74/javaee/maven-testing/maven-testing-pu.png" title="В окне 'Проекты' отображаются созданные проекты"> |
| |
| <p>После нажатия кнопки "Готово" среда IDE создает класс MyEntity и открывает его в редакторе исходного кода. В качестве зависимостей проекта IDE добавляет артефакты <tt>eclipselink</tt>, <tt>javax.persistence</tt> и <tt>org.eclipse.persistence.jpa.modelgen.processor</tt>.</p></li> |
| <li>В редакторе исходного поля добавьте к классу закрытое поле <tt>имя</tt>. |
| <pre class="examplecode">private String name;</pre> |
| </li> |
| <li>Правой кнопкой мыши щелкните редактор и выберите "Методы получения и установки" во всплывающем меню "Вставка кода" (Alt-Insert; Ctrl-I на Mac), чтобы создать метод получения и установки для поля <tt>имя</tt>. </li> |
| <li>Добавьте следующий конструктор. |
| <pre class="examplecode"> |
| public MyEntity(int id) { |
| this.id = id; |
| name = "Entity number " + id + " created at " + new Date(); |
| }</pre> |
| </li> |
| <li>Добавьте следующие аннотации <tt>@NamedQueries</tt> и <tt>@NamedQuery</tt> (выделено жирным), чтобы создать запрос SQL с именем, который выполнит поиск всех записей в таблице MyEntity. |
| <pre class="examplecode"> |
| @Entity |
| <strong>@NamedQueries({ |
| @NamedQuery(name = "MyEntity.findAll", query = "select e from MyEntity e")})</strong> |
| public class MyEntity implements Serializable {</pre> |
| <p></p> |
| </li> |
| <li>Щелкните подсказку в поле слева, рядом с объявлением класса, и выберите подсказку <strong>Создать конструктор по умолчанию</strong>.<br /> <img alt="В окне 'Проекты' отображаются созданные проекты" class="margin-around b-all" src="../../../images_www/articles/74/javaee/maven-testing/maven-testing-createconstructor.png" title="В окне 'Проекты' отображаются созданные проекты"> |
| </li> |
| <li>Исправьте импортированные операторы (Ctrl-Shift-I; ⌘-Shift-I в Mac) для добавления операторов импорта для <tt>javax.persistence.NamedQuery</tt>, <tt>javax.persistence.NamedQueries</tt> и <tt>java.util.Date</tt>. Сохраните изменения. <br /> |
| |
| </li> |
| </ol> |
| |
| |
| <a name="Exercise_1c"></a> |
| <h3>Создание компонента сеанса</h3> |
| |
| <p>В данном упражнении для создания сеансного фасада для класса сущности <tt>MyEntity</tt> используется мастер. При использовании мастера для создания фасада среда IDE также создает абстрактный фасад, содержащий такие методы. как <tt>create</tt> и <tt>find</tt>, широко используемые при доступе к классам сущностей. Затем к фасаду добавляются два метода. |
| </p> |
| |
| <ol> |
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие". |
| <p>В качестве альтернативы можно использовать 'Файл' > 'Создать файл' (Ctrl-N; ⌘-N в Mac) в главном меню, чтобы открыть мастер создания файлов.</p></li> |
| <li>Выберите сеансные компоненты для классов сущностей в категории Enterprise JavaBeans. Нажмите кнопку "Далее".</li> |
| <li>Выберите класс <tt>MyEntity</tt> из списка доступных классов сущностей и нажмите кнопку "Добавить". Нажмите кнопку "Далее".</li> |
| <li>Используйте свойства по умолчанию на панели мастера "Созданные сеансные компоненты". Нажмите кнопку 'Готово'. |
| <p>При нажатии кнопки "Готово" среда IDE создает <tt>AbstractFacade.java</tt> и <tt>MyEntityFacade.java</tt> в пакете <tt>com.mycompany.mavenwebtestapp</tt> и открывает классы в редакторе исходных кодов.</p> |
| <p>В редакторе исходных кодов можно увидеть, что среда IDE создала код для <tt>EntityManager</tt> и добавила аннотацию <tt>@PersistenceContext</tt> для указания единицы сохранения состояния.</p> |
| <pre class="examplecode"> |
| @Stateless |
| public class MyEntityFacade extends AbstractFacade<MyEntity> { |
| @PersistenceContext(unitName = "com.mycompany_mavenwebtestapp_war_1.0-SNAPSHOTPU") |
| private EntityManager em; |
| |
| @Override |
| protected EntityManager getEntityManager() { |
| return em; |
| } |
| |
| public MyEntityFacade() { |
| super(MyEntity.class); |
| } |
| |
| }</pre> |
| |
| </li> |
| <li>Добавьте следующие методы к <tt>MyEntityFacade.java</tt>. |
| <pre class="examplecode"> |
| @PermitAll |
| public int verify() { |
| String result = null; |
| Query q = em.createNamedQuery("MyEntity.findAll"); |
| Collection entities = q.getResultList(); |
| int s = entities.size(); |
| for (Object o : entities) { |
| MyEntity se = (MyEntity) o; |
| System.out.println("Found: " + se.getName()); |
| } |
| |
| return s; |
| } |
| |
| @PermitAll |
| public void insert(int num) { |
| for (int i = 1; i <= num; i++) { |
| System.out.println("Inserting # " + i); |
| MyEntity e = new MyEntity(i); |
| em.persist(e); |
| } |
| }</pre> |
| </li> |
| <li>Исправьте операторы импорта, чтобы добавить импорт всего, что нужно. Сохраните изменения. <br /> <img alt="В окне 'Проекты' отображаются созданные проекты" class="margin-around b-all" src="../../../images_www/articles/74/javaee/maven-testing/maven-testing-fiximports.png" title="В окне 'Проекты' отображаются созданные проекты"> |
| <p class="notes"><strong>Примечание.</strong> Убедитесь, что <strong><tt>javax.persistence.Query</tt></strong> выбран в диалоговом окне 'Исправить все выражения импорта'.</p> |
| </li> |
| |
| </ol> |
| </div> |
| |
| <a name="Exercise_2"></a> |
| <h2>Создание теста сеансного компонента</h2> |
| <p>В данном разделе создается тестовый класс для сеансного фасада <tt>MyEntityFacade</tt>. Среда IDE создаст схему тестовых методов для каждого метода в классе фасада, а также для каждого метода в абстрактном фасаде. Будут аннотированы тестовые методы, созданные для методов в абстрактном фасаде, чтобы указать среде IDE и средству тестирования JUnit игнорировать их. Затем будет изменен тестовый метод для метода<tt>verify</tt>, добавленного в <tt>MyEntityFacade</tt>. |
| </p> |
| |
| |
| <p>В созданных тестах вы увидите, что среда IDE автоматически добавляет код, вызывающий <tt>EJBContainer</tt>, для создания экземпляра контейнера EJB. |
| </p> |
| |
| |
| <ol> |
| <li>Правой кнопкой мыши щелкните <tt>MyEntityFacade.java</tt> в окне 'Проекты' и выберите 'Сервис' > 'Создать тесты'.</li> |
| <li>Выберите платформу тестирования из раскрывающегося списка 'Платформа'</li> |
| <li>В диалоговом окне "Создать тесты" используйте параметры по умолчанию. Нажмите кнопку "ОК". |
| <p class="notes"><strong>Примечание.</strong> При первом создании теста JUnit необходимо указать версию платформы JUnit. Выберите JUnit 4.x как версию JUnit и нажмите 'Выбрать'.</p> |
| |
| <p>По умолчанию среда IDE создает скелет тестового класса, содержащий тесты для каждого из методов в <tt>MyEntityFacade</tt> и <tt>AbstractFacade</tt>. Среда IDE автоматически добавляет к файлу POM зависимость от JUnit 4.10.</li> |
| <li>Аннотируйте каждый из тестовых методов, кроме <tt>testVerify</tt>, с помощью аннотации <tt>@Ignore</tt>. Выполняя тесты, среда IDE пропустит все тесты с аннотацией <tt>@Ignore</tt>. |
| <p>Также можно удалить все тестовые методы, кроме <tt>testVerify</tt>.</p> |
| </li> |
| <li>Расположите метод теста <tt>testVerify</tt> в тестовом классе. |
| |
| <p>Тест содержит строку, вызывающую <tt>EJBContainer</tt>.</p> |
| <pre class="examplecode"> |
| @Test |
| public void testVerify() throws Exception { |
| System.out.println("verify"); |
| EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer(); |
| MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/classes/MyEntityFacade"); |
| int expResult = 0; |
| int result = instance.verify(); |
| assertEquals(expResult, result); |
| container.close(); |
| // TODO review the generated test code and remove the default call to fail. |
| fail("The test case is a prototype."); |
| }</pre> |
| </li> |
| <li>Внесите следующие изменения (выделено полужирным) в схему метода теста <tt>testVerify</tt>. |
| <pre class="examplecode"> |
| @Test |
| public void testVerify() throws Exception { |
| System.out.println("verify"); |
| EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer(); |
| MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/classes/MyEntityFacade"); |
| <strong>System.out.println("Inserting entities..."); |
| instance.insert(5);</strong> |
| int result = instance.verify(); |
| <strong>System.out.println("JPA call returned: " + result); |
| System.out.println("Done calling EJB"); |
| Assert.assertTrue("Unexpected number of entities", (result == 5));</strong> |
| container.close(); |
| }</pre> |
| </li> |
| <li>Исправьте выражения импорта для добавления <tt>junit.framework.Assert</tt>. Сохраните изменения. |
| <p>Теперь необходимо внести изменения в файл POM и добавить зависимость от файла <tt><glassfish.embedded-static-shell.jar></tt>, расположенного в локальном каталоге установки сервера GlassFish.</p> |
| </li> |
| <li>Откройте файл <tt>pom.xml</tt> в редакторе и найдите элемент <tt><properties></tt>. |
| <pre class="examplecode"> |
| <properties> |
| <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| </properties> |
| </pre> |
| </li> |
| <li>Отредактируйте элемент <tt><properties></tt>, добавив в него элемент <tt><glassfish.embedded-static-shell.jar></tt> (выделен <strong>полужирным шрифтом</strong>), указывающий местоположение файла JAR в локальном каталоге установки GlassFish. Затем необходимо создать ссылку на это свойство в зависимости артефакта. |
| <pre class="examplecode"> |
| <properties> |
| <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| <strong><glassfish.embedded-static-shell.jar><em><INSTALLATION_PATH></em>/glassfish-4.0/glassfish/lib/embedded/glassfish-embedded-static-shell.jar</glassfish.embedded-static-shell.jar></strong> |
| <!-- <glassfish.embedded-static-shell.jar>/Applications/NetBeans/glassfish-3.1.1/glassfish/lib/embedded/glassfish-embedded-static-shell.jar</glassfish.embedded-static-shell.jar>--> |
| </properties> |
| </pre> |
| <p class="notes"><strong>Примечание.</strong> <tt><em><INSTALLATION_PATH></em></tt> - абсолютный путь к локальному каталогу установки GlassFish. В случае изменения пути к локальной установке потребуется изменить этот элемент в файле POM.</p> |
| </li> |
| <li>Щелкните правой кнопкой мыши узел "Зависимости" в окне проектов и выберите пункт "Добавить зависимость".</li> |
| <li>В диалоговом окне 'Добавление зависимости' в текстовом поле 'Запрос' введите <strong>embedded-static-shell</strong>. |
| |
| </li> |
| <li>Выделите файл 4.0 JAR в результатах поиска и нажмите 'Добавить'.<br /> <img alt="cнимок экрана окна 'Результаты теста'" class="margin-around b-all" src="../../../images_www/articles/74/javaee/maven-testing/add-shell-dependency.png" title="Окно 'Результаты теста'"> |
| |
| <p>При нажатии на кнопку 'Добавить' среда IDE добавляет зависимость к файлу POM.</p> |
| <p>Теперь нужно внести изменения в файл POM, указав локальный каталог установки GlassFish в качестве источника JAR.</p></li> |
| <li>Найдите соответствующую зависимость в файле POM и внесите изменения (выделены <strong>полужирным шрифтом</strong>). Создайте в элементе ссылку на ранее добавленное свойство <tt><glassfish.embedded-static-shell.jar></tt> и укажите область (<tt><scope></tt>). Сохраните изменения. |
| |
| <pre class="examplecode"> |
| <dependency> |
| <groupId>org.glassfish.main.extras</groupId> |
| <artifactId>glassfish-embedded-static-shell</artifactId> |
| <version>4.0</version> |
| <strong><scope>system</scope> |
| <systemPath>${glassfish.embedded-static-shell.jar}</systemPath></strong> |
| </dependency> |
| </pre> |
| </li> |
| |
| <li>В окне 'Службы' щелкните правой кнопкой мыши узел GlassFish Server и выберите 'Пуск'. |
| <p>Сервер базы данных JavaDB будет также запускаться при запуске сервера GlassFish.</p></li> |
| <li>В окне 'Проекты' щелкните правой кнопкой мыши узел проекта и выберите 'Тестирование'. </li> |
| </ol> |
| |
| <p>После выбора пункта "Тест" среда IDE создаст приложение и запустит этап тестирования жизненного цикла сборки. Модульные тесты будут выполнены при помощи подключаемого модуля surefire, который поддерживает запуск тестов JUnit 4.x. Подробнее о подключаемом модуле surefire см. <a href="http://maven.apache.org/plugins/maven-surefire-plugin/">http://maven.apache.org/plugins/maven-surefire-plugin/</a>.</p> |
| |
| |
| |
| <p>Результаты теста отображаются в окне 'Результаты теста'. Можно открыть окно 'Результаты теста', выбрав 'Окно'> 'Выходные данные'> 'Результаты тестов' в главном меню. |
| </p> |
| <img alt="cнимок экрана окна 'Результаты теста'" class="margin-around b-all" src="../../../images_www/articles/74/javaee/maven-testing/maven-test-results.png" title="Окно 'Результаты теста'"> |
| <p>В окне 'Результаты теста' вы можете нажать на значок 'Прошел успешно' (<img alt="Значок 'Прошел успешно'" src="../../../images_www/articles/74/javaee/maven-testing/test-ok_16.png" title="Значок 'Прошел успешно'">), чтобы отобразить список всех тестов, которые прошли успешно. В данном примере можно увидеть девять результатов. Если посмотреть на окно 'Результаты', можно увидеть, что был запущен только один тест, а восемь было пропущено. Пропущенные тесты включены в список тестов, которые прошли в окне 'Результаты теста'.</p> |
| <pre class="examplecode"> |
| Running com.mycompany.mavenwebtestapp.MyEntityFacadeTest |
| verify |
| ... |
| Inserting entities... |
| Inserting # 1 |
| Inserting # 2 |
| Inserting # 3 |
| Inserting # 4 |
| Inserting # 5 |
| Found: Entity number 2 created at Wed Oct 09 19:06:59 CEST 2013 |
| Found: Entity number 4 created at Wed Oct 09 19:06:59 CEST 2013 |
| Found: Entity number 3 created at Wed Oct 09 19:06:59 CEST 2013 |
| Found: Entity number 1 created at Wed Oct 09 19:06:59 CEST 2013 |
| Found: Entity number 5 created at Wed Oct 09 19:06:59 CEST 2013 |
| JPA call returned: 5 |
| Done calling EJB |
| ... |
| |
| Results : |
| |
| Tests run: 9, Failures: 0, Errors: 0, Skipped: 8 |
| </pre> |
| |
| <!-- |
| <a name="Exercise_3"></a> |
| <h2>Checking Code Coverage</h2> |
| |
| <p>In this section you install the Maven Code Coverage plugin and configure the POM to add reporting. See http://wiki.netbeans.org/MavenCodeCoverage</p> |
| <ol> |
| <li>Open the Services window in the IDE.</li> |
| <li>Expand the sample datasource connection under the Database node.</li> |
| <li>Expand the Tables node under the App node.</li> |
| <li>Right-click the SEQUENCE table and choose Delete.</li> |
| <li>Add the following to the POM. Save your changes. |
| <pre class="examplecode"></dependencies> |
| |
| <strong><reporting> |
| <plugins> |
| <plugin> |
| <groupId>org.codehaus.mojo</groupId> |
| <artifactId>cobertura-maven-plugin</artifactId> |
| <version>2.5.1</version> |
| </plugin> |
| </plugins> |
| </reporting></strong> |
| |
| <build></pre> |
| </li> |
| <li>Right-click project node and choose Code Coverage > Show Report.</li> |
| <li>Open MyEntityFacadeTest in the editor.</li> |
| <li>Modify the test to change the JNDI lookup for the bean from |
| <tt>java:global/classes/MySessionBean</tt> to <tt>java:global/cobertura/MySessionBean</tt>. |
| <pre class="examplecode"> |
| @Test |
| public void testVerify() throws Exception { |
| System.out.println("verify"); |
| EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer(); |
| // MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/classes/MyEntityFacade"); |
| <strong>MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/cobertura/MyEntityFacade");</strong> |
| System.out.println("Inserting entities..."); |
| instance.insert(5); |
| int result = instance.verify(); |
| System.out.println("JPA call returned: " + result); |
| System.out.println("Done calling EJB"); |
| Assert.assertTrue("Unexpected number of entities", (result==5)); |
| container.close(); |
| }</pre> |
| |
| </li> |
| |
| |
| <li>Click Run All Tests in Code Coverage window. |
| |
| <p>Result displays coverage is 0% and the following is in the Output window. </p> |
| </li> |
| |
| </ol> |
| |
| --> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <br> |
| <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20Creating%20an%20Enterprise%20Application%20Using%20Maven">Отправить отзыв по этому учебному курсу</a></div> |
| <br style="clear:both;" > |
| <!-- ======================================================================================= --> |
| <h2><a name="nextsteps"></a>Дополнительные сведения</h2> |
| <p>Подробнее об использовании IDE NetBeans для разработки приложений Java EE см. в следующих ресурсах: |
| </p> |
| <ul> |
| <li><a href="javaee-intro.html">Введение в технологию Java EE </a></li> |
| <li><a href="javaee-gettingstarted.html">Начало работы с приложениями Java EE</a></li> |
| <li><a href="maven-entapp.html">Создание приложения уровня предприятия с помощью Maven</a></li> |
| <li><a href="../../trails/java-ee.html">Учебная карта по Java EE и Java Web</a></li> |
| </ul> |
| <p>Дополнительные сведения по использованию компонентов уровня предприятия приведены в <a href="http://download.oracle.com/javaee/6/tutorial/doc/">учебном курсе по Java EE 6</a>.</p> |
| <p>To send comments and suggestions, get support, and keep informed on the latest developments on the IDE NetBeans Java EE development features, <a href="../../../community/lists/top.html">join the nbj2ee mailing list</a>.</p> |
| </body> |
| </html> |