Написание блочных тестов для IBM Cúram Social Program Management

Использование CuramServerTest с помощью JUnit

Блочное тестирование является важной составляющей разработки качественного программного обеспечения и предоставляет возможность тестирования расширений, разрабатываемых в рамках конкретного проекта. В этой статье приводится описание передового практического подхода к блочным тестам при разработке с использованием программного обеспечения IBM Cúram Social Program Management.

Патрик Фаган, главный специалист по архитектуре, группа разработчиков платформы Cúram, IBM

Photograph of Patrick FaganПэдди Фаган (Paddy Fagan) является главным специалистом по архитектуре в группе разработчиков платформы Cúram. В качестве главного специалиста по архитектуре в группе разработчиков платформы Cúram он отвечает за архитектуру всех проектов на платформе Cúram. Пэдди работал над продуктом Cúram с самого момента его появления 15 лет назад и принимал участие практически во всех аспектах разработки продукта Cúram. Пэдди был напрямую вовлечен в создание стратегии блочного тестирования для приложения Cúram, а в настоящее время продолжает принимать самое непосредственное участие в развитии этого приложения.



29.05.2013

Обзор

Организации, управляющие реализацией программ социального развития (например, государственные службы социальной помощи, службы занятости и организации социального обеспечения), сталкиваются с постоянным ростом потребностей и ожиданий клиентов от предоставляемых услуг, и при этом стоят перед необходимостью сдерживания роста своих расходов и оптимизации результатов деятельности. Платформа Cúram Social Program Management Platform предоставляет готовые компоненты, бизнес-процессы, наборы инструментальных средств, интерфейсы и возможности конфигурирования, предназначенные специально для программ социального развития и обеспечивающие возможность создания решений в поддержку роста потребностей и обеспечения эффективности обслуживания.

Данная платформа позволяет разрабатывать дополнительные компоненты для поддержки особых требований проектов с использованием набора механизмов расширения. Поскольку блочное тестирование является важной составляющей разработки качественного программного обеспечения, возможность написания блочных тестов для любых расширений, разрабатываемых в рамках конкретного проекта, является очень ценной.

Написание блочных тестов для обработки деловой информации приложения Cúram Social Program Management

При расширении приложения Cúram Social Program Management отправной точкой является платформенно-независимая модель приложения. Приложения Cúram Social Program Management строятся на основе сервис-ориентированной архитектуры, а предоставляемые приложением сервисы определяются в данной модели в качестве интерфейсов UML. Все интерфейсы в модели называются «бизнес-объектами». Реализации бизнес-объектов программируются в виде простых объектов Java™ (POJO).

Эти объекты Java можно подвергать блочному тестированию с использованием какой-либо инфраструктуры блочного тестирования, например JUnit (http://www.junit.org). Тем не менее для всех тестов требуются многочисленные рутинные подготовительные и заключительные операции (управление транзакциями базы данных и многое другое). Кроме того, существует ряд типичных задач, применимых к различным тестам (например, вычисления вокруг текущей даты). Для поддержки этого был создан подкласс JUnit-класса TestCase с именем CuramServerTest. Написание классов блочных тестов, которые наследуют данному классу, является гораздо более простой задачей по сравнению с использованием JUnit-класса TestCase и управлением общими функциями напрямую.


Написание простого блочного теста с использованием CuramServerTest

Как правило, после того как блочный тест наследует CuramServerTest реализация может придерживаться нормальной структуры для тестов JUnit, вызывая элементы приложения SPM без каких-либо дополнительных оговорок. Чтобы продемонстрировать, как это может работать, рассмотрим пример написания теста JUnit для нового процесса.

Листинг 1. Образец объявления класса
public class MyBusinessProcess extends curam.test.framework.CuramServerTest {

  // …

}

Конструктор

Каждый блочный тест требует объявления его собственного конструктора. Как правило, можно без опасений положиться на конструктор CuramServerTest. В то же время можно включить дополнительные шаги, например создание каких-либо экземпляров бизнес-объектов, необходимых ряду реализаций теста.

Листинг 2. Образец объявления класса
public MyUnitTest(String arg0) throws AppException, InformationalException {

  super(arg0);
  myBusinessProcessObj = curam.custom.fact.MyBusinessProcessFactory.newInstance();

}

Поток по умолчанию

Большинство блочных тестов требуют, чтобы хотя бы один из них охватывал поток по умолчанию (то, что можно было бы назвать «путем с удачным исходом»), в котором тестируется большинство часто выполняемых успешных путей по логике. При использовании инфраструктуры JUnit требуется, чтобы имена всех методов тестирования начинались с «test» и не был объявлен возвращаемый параметр.

Листинг 3. Образец потока по умолчанию
public void testDefaultFlow() throws AppException, InformationalException {

  // заполнение сведений
  myBusinessProcessDetails.someField = “некоторое значение”;
  myBusinessProcessDetails.someOtherField = “некоторое значение”;
  myBusinessProcessDetails.someNumericField = 0;
  myBusinessProcessDetails.someDateField = getToday();

  // создание записи
  myBusinessProcessObj.create(myBusinessProcessDetails);

}

Тестирование на исключение

Еще одной распространенной моделью в блочных тестах являются организация ожидаемой ситуации возникновения ошибки и проверка возврата ожидаемого сообщения.

Листинг 4. Образец теста на исключение
public void testValidationSomeFieldIsMandatory() throws AppException, 
  InformationalException {

  // заполнение сведений
  myBusinessProcessDetails.someField = “”;
  myBusinessProcessDetails.someOtherField = “некоторое значение”;
  myBusinessProcessDetails.someNumericField = 0;
  myBusinessProcessDetails.someDateField = getToday();

  // попытка создания записи
  try {

    myBusinessProcessObj.create(myBusinessProcessDetails);

  } catch (curam.util.exception.AppException e) {
    
    // проверка ожидаемого исключения
    assertEquals(curam.message.MYBUSINESSPROCESS.ERR_SOME_FIELD_MANDATORY, 
      e.getCatEntry());
    return;

  }

  // если создание успешно, тестирование должно завершиться неудачей
  fail("Ожидаемое исключение: " + 
    curam.message.MYBUSINESSPROCESS.ERR_SOME_FIELD_MANDATORY.toString());

}

Написание собственного кода для подготовительных и заключительных операций

Путем переопределения методов setUpCuramServerTest и tearDownCuramServerTest класса CuramServerTest вы можете добавлять дополнительные шаги, выполняемые до (setUpCuramServerTest) или после (tearDownCuramServerTest) каждого метода тестирования. Данные методы используются вместо методов JUnit setUp и tearDown (которые имеют конечные реализации, предоставляемые классом CuramServerTest), поскольку это обеспечивает выполнение пользовательской обработки и не мешает управлению транзакциями базы данных посредством класса CuramServerTest.

Листинг 5. Образец подготовительных и заключительных операций
public void setUpCuramServerTest() throws AppException, InformationalException {

  // …

}

public void tearDownCuramServerTest() throws AppException, InformationalException {

  // …

}

Управление транзакциями базы данных

Управление транзакциями базы данных реализуется классом CuramServerTest. Конфигурация по умолчанию предусматривает наличие единственной транзакции базы данных, которая выполняется для каждого теста с последующим откатом. Однако путем переопределения метода shouldCommit и его настройки на возврат истинного логического значения вы можете обеспечить фиксацию транзакций базы данных после каждого теста в конкретном классе тестирования. Важно, чтобы при использовании данной конфигурации в ваших тестах не делалось никаких предположений о порядке выполнения тестов (например, предположения о том, что в конкретной таблице будет существовать некоторое фиксированное количество записей).

Листинг 6. Использование shouldCommit для фиксации транзакций базы данных
protected boolean shouldCommit() {

  return true;

}

Использование CuramServerTest в вашем проекте

К статье прилагается пример реализации класса CuramServerTest (см. раздел Загрузка). Этот класс был протестирован с использованием продукта IBM Cúram Social Program Management 6.0.3. Для использования этого класса в своем проекте вам достаточно поместить данный класс в любое место размещения компилируемых файлов, где существуют папки, соответствующие структуре пакета. Например: EJBServer\components\custom\source\curam\test\framework. Вам также потребуется загрузить JUnit и разместить junit.jar в пути к классам (например, в EJBServer\components\custom\lib). Данный класс был протестирован с использованием JUnit версий 3.8 и 4.8. Возможно, другие версии также будут работать, но они не тестировались, и их правильная работа не гарантируется.


Заключение

В этой статье рассматривается подход к написанию блочных тестов при разработке с использованием программного обеспечения IBM Cúram Social Program Management. Мы узнали о том, как использовать класс CuramServerTest для упрощения написания блочных тестов. Мы также обсудили некоторые возможности данного класса, которые поддерживают более сложные сценарии использования. Применение этого подхода делает возможным тщательное тестирование расширений, разрабатываемых в рамках конкретного проекта, и обеспечение надежной работы таких расширений.


Загрузка

ОписаниеИмяРазмер
Код тестаCuramServerTest.zip4 КБ

Ресурсы

Научиться

Получить продукты и технологии

  • Решения IBM Smarter City в облаке: центр IBM Intelligent Operations Center на платформе IBM SmartCloud предлагает простой сервис с оплатой по единой цене с в зависимости от количества пользователей. Оплата включает все расходы, в том числе затраты на аппаратные средства, программное обеспечение, техническое обслуживание, техническую поддержку и сеть.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=931841
ArticleTitle=Написание блочных тестов для IBM Cúram Social Program Management
publish-date=05292013