Статьи

Улучшение тестируемости Java EE с помощью Arquillian; 1.0.0 Альфа 1 выпущен


На Devoxx ’09 JBoss представил платформу, которая может помочь улучшить тестируемость Java EE и JBoss AS. 
Интеграционное тестирование важно в Java EE, потому что бизнес-компоненты часто взаимодействуют с ресурсами или подсистемой контейнера, и многие декларативные службы применяются к бизнес-компоненту во время выполнения. Хотя большинство бизнес-логики теперь можно тестировать вне контейнера, поскольку они являются POJO (начиная с JEE 5), многие инфраструктурные сервисы (транзакции, безопасность и т. Д.) Были помещены в декларативные программные конструкции, чтобы изолировать бизнес-логику JEE. от услуг.
ArquillianИнфраструктура для запуска тестов в контейнере помогает подтвердить, что бизнес-логика работает правильно в контексте, и проверяет, правильно ли применяются службы инфраструктуры. Выпуск 1.0.0 альфа 1
Arquillian теперь доступен вместе с обширной информацией о новой технологии. Как и большинство их новых проектов, JBoss лицензировал Arquillian под ASL v2.

Arquillian отлично подходит для проверки уровня интеграции, который предоставляет бизнес-логику в корпоративном Java-приложении. Он используется как расширение для TestNG и JUnit, и вы можете сравнить его с современной версией
Cargo , но с гораздо большим потенциалом.  

Arquillian подключается к жизненному циклу вашей среды тестирования и начинает реагировать на события для управления контейнером (запуск / остановка). Он также объединяет тестовый класс в развертываемый архив вместе с зависимыми классами и ресурсами. Развертывание архива для тестирования (развертывание / отмена развертывания) и получение результатов вместе со сбоями — это еще одна вещь, которую обрабатывает Arquillian.  

Arquillian определяет два стиля контейнера: удаленный и встроенный. Конфигурация для конкретного контейнера отсутствует, поэтому начиная с альфа-1 вы можете запускать тестовые случаи с Arquillian в GlassFish (встроенный), JBoss AS (удаленный), OpenEJB (встроенный) или в контейнере компонента Weld SE (встроенный). Вы также можете протестировать на нескольких платформах. JBoss намеревается добавить больше поддерживаемых контейнеров в будущих выпусках.

Следующий фрагмент кода является примером настройки тестового примера.
пример использования Arquillian с JUnit:

@RunWith(org.jboss.arquillian.junit.Arquillian.class)
public class TemperatureConverterTestCase {

@Deployment
public static JavaArchive createTestArchive() {
return Archives.create("test.jar", JavaArchive.class)
.addClasses(TemperatureConverter.class, TemperatureConverterBean.class);
}

}

Аннотация @RunWith указывает JUnit использовать Arquillian в качестве тестового контроллера. Затем Arquillian ищет статический метод с аннотацией @Deployment, который создает микро развертывание (подробнее о них через минуту). Приведенный выше пример представлял собой интерфейс сессионного компонента и развертывание реализации.

Как только тестовый пример запускается в локальной JVM, Arquillian отменяет обычное выполнение теста и перемещает тест в контейнер, где он выполняется. Поскольку тестовая среда работает в контейнере к тому времени, когда он вызывает @Test, вы можете работать с управляемыми ресурсами контейнера. Ниже приведен пример полного тестового класса с методами JUnit @Test:

@RunWith(org.jboss.arquillian.junit.Arquillian.class)
public class TemperatureConverterTestCase {

@Deployment
public static JavaArchive createTestArchive() {
return Archives.create("test.jar", JavaArchive.class)
.addClasses(TemperatureConverter.class, TemperatureConverterBean.class);
}

@EJB
private TemperatureConverter converter;

@Test
public void shouldConvertToCelsius() {
Assert.assertEquals(converter.convertToCelsius(32d), 0d);
Assert.assertEquals(converter.convertToCelsius(212d), 100d);
}

@Test
public void shouldConvertToFarenheit() {
Assert.assertEquals(converter.convertToFarenheit(0d), 32d);
Assert.assertEquals(converter.convertToFarenheit(100d), 212d);
}
}

Вы даже можете использовать @EJB для внедрения сессионного компонента из вашего развертывания в тестовый пример и использовать его в своем методе тестирования. Все аннотации инъекций из JEE6 (@EJB, @Resource, @Inject) поддерживаются Arquillian.

Большим преимуществом Arquillian является то, что он облегчает тестирование корпоративных приложений Java в среде, в которой они в конечном итоге будут работать. Этот метод лучше, чем введение фиктивных объектов, которые не всегда будут вести себя как настоящие.  

Еще одним преимуществом Arquillian является его способность создавать «микро развертывания» вокруг вашего теста. Это подразделы вашей логики приложения. Свободный API, предоставляемый
ShrinkWrapПроект делает эту технику возможной. Микро-развертывания позволяют проводить тестирование на низкоуровневых интеграциях, а API ShrinkWrap дает вам детальный контроль над тем, какие ресурсы доступны для тестирования.  

Чтобы узнать больше об Arquillian, ознакомьтесь с хорошо написанной
документацией , которая включает в себя руководство по настройке Arquillian — сборка волшебства не требуется! Теперь у вас нет оправданий не заниматься TDD.