Читаем Изучаем Java EE 7 полностью

Одна из жалоб на предыдущие версии Entity CMP 2.x заключалась в сложности интеграционного тестирования постоянных компонентов. Один из основных выигрышных моментов JPA состоит в том, что вы можете с легкостью тестировать сущности без необходимости в работающем сервере приложений или реальной базе данных. Но какие именно функции вы можете протестировать? Сущности как таковые обычно не нуждаются в тестировании в изоляции. Большинство методов сущностей представляют собой простые геттеры или сеттеры. Проверка того, что сеттер присваивает значение атрибуту, а также того, что соответствующий геттер извлекает то же значение, не имеет особой ценности (если только побочный эффект не проявится в геттерах или сеттерах). Поэтому модульное тестирование сущностей представляет ограниченный интерес.

А как насчет тестирования запросов к базе данных? Нужно ли убедиться в том, что запрос findBookH2G2 корректен? Или вводить информацию в базу данных и тестировать комплексные запросы, возвращающие множественные значения? Такие интеграционные тесты потребовали бы реальной базы данных с реальной информацией, либо вы стали бы проводить модульное тестирование в изоляции, пытаясь симулировать запрос. Хорошее компромиссное решение — использовать базу данных в оперативной памяти и JPA-транзакции. CRUD-операции и JPQL-запросы могут быть протестированы с применением очень легковесной базы данных, которая не потребует запуска отдельного процесса (понадобится лишь добавить файл с расширением. jar, используя путь к соответствующему классу). Рассмотрим, как придется задействовать наш класс BookIT во встроенном режиме Derby.

Maven использует два разных каталога, один из которых применяется для размещения кода главного приложения, а другой — для тестовых классов. Класс BookIT, показанный в листинге 4.9, располагается в каталоге src/test/java и осуществляет тестирование на предмет того, может ли менеджер сущностей обеспечить постоянство сущности Book и извлекать ее из базы данных, а также удостоверяется в том, что применяются ограничения Bean Validation.


Листинг 4.9. Тестовый класс, который создает и извлекает Book из базы данных

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);

··}

}

Перейти на страницу:

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

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT