2016-09-14 5 views
1

Можем ли мы использовать JUnit для тестирования пакетных заданий Java? Поскольку Junit запускает локальные и java-пакетные задания, запущенные на сервере, я не уверен, как начать работу (я попытался использовать класс JobOperator) из тестовых примеров JUnit.JSR: 352 Единичное тестирование Java Batch Code?

Если JUnit не является подходящим инструментом, как мы можем выполнить модульный пакетный код java.

Я использую с помощью реализации IBM по JSR 352 работает на WAS Liberty

ответ

2

JUnit является, прежде всего, автоматизации и тест монитора рамки. Значение: вы можете использовать его для управления всеми видами методов @Test.

С концептуальной точки определения unit tests довольно расплывчато; если вы будете следовать википедии, «все, что вы делаете, чтобы проверить что-то», можно рассматривать как единичный тест. В соответствии с этой перспективой, конечно, вы можете «единичный тестовый» пакетный код, который выполняется в пакетной структуре.

Но: большинство людей считают, что «истинные», «полезные» модульные тесты не требуют наличия каких-либо внешних вещей. Такие тесты можно запускать «локально» во время сборки. Нет необходимости для серверов, файловых систем, сетей, ...

Имея это в виду, я не думаю, что есть две вещи, которые вы можете работать с:

  1. Вы можете использовать JUnit для привода «интеграции» или " функциональные тесты ". Смысл: вы можете определить набор тестов, которые выполняют «полную вещь» - определить партии, обработать их для проверки ожидаемых результатов в конце. Как сказано, это будет интеграция тестов, которые гарантируют, что сквозной поток работает как ожидалось.
  2. Вы смотрите на «нормальный» JUnit unit-testing. Значение: вы фокусируетесь на тех аспектах вашего кода, которые «не связаны» с пакетной структурой (другими словами: обратите внимание на POJO) и проверяйте их. Локально; возможно, с насмешливыми рамками; не полагаясь на реальную пакетную службу, запускающую ваш код.
2

Основываясь на ответе от @GhostCat, кажется, вы спрашиваете, как управлять полной работой (его пуля 1.) в своих тестах. (Конечно модульного тестирования компонентов чтения/процессор/записи по отдельности также может быть полезным.)

Ваши основные опции:

  1. Использование Arquillian (см here для ссылки на начало работы с Arquillian и Свободы) для запуска ваших тестов на сервере, но чтобы Arquillian справился с задачами развертывания приложения на сервере и сбора результатов.

  2. Напишите свой собственный ремень для сервлетов, управляющий работой через интерфейс JobOperator. См. Ответ от @aguibert на this question для отправной точки. Обратите внимание, что вы, вероятно, захотите написать свою собственную обычную процедуру опроса JobExecution для одного из «законченных» состояний (ЗАВЕРШЕНО, НЕИСПРАВНО или STOPPED), если у ваших заданий нет других средств для информирования заявителя.


Другой метод, чтобы иметь в виду, фасоль запуска.Вы можете запускать задания просто запустив сервер с запуском бобом, как:

@Startup 
@Singleton 
public class StartupBean { 

    JobOperator jobOp = BatchRuntime.getJobOperator(); 

    // Drive job(s) on startup. 
    jobOp.start(...);   

Это может быть полезно, если у вас есть способ, чтобы проверить работу результатов отдельно от использования интерфейса JobOperator (для которого вы должны быть на сервере). Ваши тесты могут просто опросить и проверить результаты работы. Вам даже не нужно открывать HTTP-порт, а накладные расходы на запуск сервера - всего несколько секунд.

Смежные вопросы