| <!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><b>Упражнения по темам руководства</b></p> |
| <img alt="Содержимое на этой странице применимо к IDE NetBeans 7.1" class="stamp" src="../../../images_www/articles/71/netbeans-stamp.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.1"> |
| |
| <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.1, пакет 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">версия 6 или 7</td> |
| </tr> |
| <tr> |
| <td class="tbltd1">GlassFish Server Open Source Edition 3.1.2.2</td> |
| <td class="tbltd1">3.1.1</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://www.sonatype.com/books/maven-book/reference/introduction.html" target="_blank">Глава 1. Введение в Apache Maven</a> (фрагмент из книги <a href="http://www.sonatype.com/books/maven-book/reference/public-book.html" target="_blank">Maven: The Definitive Guide</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 на локальный компьютер. Starting with IDE NetBeans 7.0, Maven is bundled with the IDE and installed when you install the IDE. В случае использования более ранней версии среды IDE можно загрузить программу установки с <a href="http://maven.apache.org/">веб-сайта Maven</a>.</p> |
| |
| <ol> |
| <li>Откройте окно "Параметры" в среде IDE.</li> |
| <li>Выберите в окне "Параметры" категорию "Дополнительно" и перейдите на вкладку "Maven".</li> |
| <li>Подтвердите указание домашней страницы Maven. |
| <p>Можно использовать версию Maven, входящую в комплект среды IDE, либо указать местоположение локальной установки Maven (требуется версия 2.0.9 или более поздняя).</p></li> |
| <li>Проверьте корректность адреса к локальному репозиторию Maven.</li> |
| <li>Для закрытия окна "Параметры" нажмите кнопку "ОК".</li> |
| </ol> |
| |
| <p class="notes"><strong>Примечания.</strong> Если проект Maven ранее не создавался в среде IDE, сначала необходимо активировать в среде IDE модуль Maven. Это можно сделать, выбрав архетип проекта Maven в мастере создания проекта. После выбора архетипа среда IDE автоматически активирует модуль. Не требуется завершать работу мастера для активации Maven в среде IDE.</p> |
| </div> |
| |
| <p class="tips"><strong>Обновите репозитории Maven</strong></p> |
| <div class="indent"> |
| <p>Локальные и удаленные репозитории Maven используются для автозавершения кода, а также при построении проектов. Обновление индексов удаленных репозиториев Maven требуется для обеспечения немедленной доступности всех артефактов, которые могут потребоваться при разработке проекта. Частоту проверки наличия обновлений можно настроить на вкладке "Maven" в окне "Параметры" среды IDE. Для непосредственной проверки наличия обновлений и обзора локальных и удаленных репозиториев Maven используется браузер репозиториев Maven.</p> |
| |
| <ol> |
| <li>Выберите пункт меню "Окно > Прочее > Браузер репозиториев Maven".</li> |
| <li>Щелкните 'Обновить индексы' ( <img alt="Кнопка 'Обновить индексы'" src="../../../images_www/articles/72/javaee/maven-testing/maven-refreshrepo.png" title="Кнопка 'Обновить индексы'"> ) в верхней части окна браузера репозитория Maven.</li> |
| </ol> |
| |
| <p>При нажатии кнопки "Обновить индексы" в среде IDE выполняется проверка и загрузка самого свежего индекса для каждого из настроенных удаленных репозиториев Maven. Индекс представляет текущее состояние артефактов, расположенных в репозитории, и используется для предоставления ссылок на артефакты, доступных для использования в приложении. По умолчанию артефакты не загружаются из репозитория автоматически без явно обозначенной необходимости в них.</p> |
| |
| <p class="notes"><strong>Примечание.</strong> Размер индексов довольно велик и обновление всех индексов может занять значительное время.</p> |
| </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 6 из архетипа 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 Server 3.1.1 из раскрывающегося списка "Сервер".</li> |
| <li>Выберите выбирать Java EE 6 Web из раскрывающегося списка "Версия Java EE". Нажмите кнопку "Завершить".</li> |
| </ol> |
| <p>После нажатия кнопки "Готово" среда IDE создает веб-приложение и открывает проект в окне "Проекты".</p> |
| |
| <img alt="В окне 'Проекты' отображаются созданные проекты" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-projects.png" title="В окне 'Проекты' отображаются созданные проекты"> |
| |
| <p>При развертывании узла проекта в окне "Проекты" можно увидеть, что файл JAR <tt>javaee-web-api-6.0</tt> указан в списке как зависимость проекта, а JDK 1.6 указан как зависимость 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/72/javaee/maven-testing/maven-testing-pu.png" title="В окне 'Проекты' отображаются созданные проекты"> |
| |
| <p>После нажатия кнопки "Готово" среда IDE создает класс MyEntity и открывает его в редакторе исходного кода. Среда IDE добавляет в качестве зависимостей артефакты <tt>eclipselink-2.3.0</tt>, <tt>javax.persistence-2.0.3</tt> и <tt>org.eclipse.persistence.jpa.modelgen.processor-2.3.0</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/72/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>MyEntity.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/72/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. При создании класса теста строка, содержащая вызов, включает подсказку на левой границе о том, что API Java EE не находится на пути к классу, и рекомендацию по использованию EJBContainer из установки GlassFish Server 3.1. Эта подсказка изменит POM для добавления свойства, указывающего путь к локальной установке GlassFish. |
| </p> |
| |
| <!-- <p>The Ant version includes steps to use @BeforeClass and @AfterClass to create and close the container, |
| but these annotations do not seem to work with Maven.</p>--> |
| |
| <ol> |
| <li>Правой кнопкой мыши щелкните <tt>MyEntityFacade.java</tt> в окне "Проекты" и выберите "Сервис" > "Создать тесты JUnit".</li> |
| <li>В качестве версии JUnit выберите JUnit 4.x. Нажмите кнопку "Выбрать".</li> |
| <li>В диалоговом окне "Создать тесты" используйте параметры по умолчанию. Нажмите кнопку "ОК". |
| <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>Щелкните аннотацию ошибки в поле и выберите <strong>Использовать EJBContainer из установки GlassFish Server 3.1.1</strong> во всплывающем меню. |
| <p>Также можно поместить курсор вставки в строку, содержащую ошибку, и нажать Alt+Return, а затем выбрать предлагаемое значение из всплывающего меню. </p> |
| <a href="../../../images_www/articles/72/javaee/maven-testing/maven-testing-ejbcontainer.png" rel="lytebox" title="Выберите подсказку для указания местоположения EJBContainer"> <img alt="снимки, на которых показана подсказка редактора для указания местоположения EJBContainer" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-ejbcontainer.png" style="width: 600px" title="Щелкните для увеличения"></a> |
| |
| |
| <p>После выбора предлагаемого значения среда IDE добавляет элемент <tt><glassfish.embedded-static-shell.jar></tt> (выделено жирным) к элементу<tt><properties></tt> в файл POM. Элемент <tt><glassfish.embedded-static-shell.jar></tt> используется для определения пути к локальной установке сервера GlassFish. В случае изменения пути к локальной установке потребуется изменить этот элемент в файле POM. |
| </p> |
| <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>/Applications/NetBeans/glassfish-3.1.1/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>Среда IDE также добавляет в файл POM зависимость от <tt>glassfish-embedded-static-shell</tt>, ссылающуюся на путь к локальной установке.</p> |
| <pre class="examplecode"> |
| <dependency> |
| <groupId>org.glassfish.extras</groupId> |
| <artifactId>glassfish-embedded-static-shell</artifactId> |
| <version>3.1.1</version> |
| <scope>system</scope> |
| <systemPath>${glassfish.embedded-static-shell.jar}</systemPath> |
| </dependency> |
| </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>. Сохраните изменения.</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> |
| |
| <p>В данном примере можно увидеть девять результатов. Если посмотреть на окно вывода, можно увидеть, что был запущен только один тест, и восемь было пропущено.</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 Fri Feb 25 18:26:53 CET 2011 |
| Found: Entity number 4 created at Fri Feb 25 18:26:53 CET 2011 |
| Found: Entity number 3 created at Fri Feb 25 18:26:53 CET 2011 |
| Found: Entity number 1 created at Fri Feb 25 18:26:53 CET 2011 |
| Found: Entity number 5 created at Fri Feb 25 18:26:53 CET 2011 |
| 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> |
| Download and install plugin |
| <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>For more information about using IDE NetBeans to develop Java EE applications, see the following resources: |
| </p> |
| <ul> |
| <li><a href="../../docs/javaee/javaee-intro_ru.html">Введение в технологию Java EE </a></li> |
| <li><a href="../../docs/javaee/javaee-gettingstarted_ru.html">Начало работы с приложениями для Java EE</a></li> |
| <li><a href="../../docs/javaee/javaee-entapp-ejb_ru.html">Создание приложения уровня предприятия с помощью EJB 3.1</a></li> |
| <li><a href="../../trails/java-ee_ru.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> |