Написание собственных тестов, Пример 3
Следующий исходный код является примером теста, показывающего асинхронный подход к запросу и обработке данных.
/*
* Лицензионные материалы - собственность IBM
*
* 5724-H72, 5655-L82, 5724-L26, 5655R3600
*
* (c) Copyright IBM Corp. 2005, 2020
*
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
package com.ibm.mq.explorer.tests.sample;
/**
* Пример кода для демонстрации асинхронного подхода к реализации
* Теста.
*/
public class QueuesTest extends WMQTest implements SomeListener {
/** Используется для хранения результатов теста. */
private ArrayList testresults = new ArrayList();
/**
* Используется для запуска теста.
* <p>
* @param callback управляющий элемент для службы теста, выполняющей тест
* @param guimonitor управляющий элемент для объекта, отслеживающего тест,
* предоставляется для разрешения тесту периодически проверять
* пытался ли пользователь отменить выполняемый тест
*/
public void runTest(WMQTestEngine callback, IProgressMonitor guimonitor, MQExtObject[] contextObjects, TreeNode treenodeId) {
super.runTest(callback, guimonitor, contextObjects, treenodeId);
// сбросить все хранилища тестов
testresults = new ArrayList();
// инициализирует компонент индикатора состояния GUI, используемый для отображения выполнения
// данного теста
guimonitor.beginTask(getTestName(), numqmgrs);
// пуск теста!
// отправить запрос
PseudoQueueManager qmgrHandle = pseudoGetQueueManager();
submitQmgrQuery(qmgrHandle, this, query);
// обратите внимание, что метод runTest завершен, но тест не закончен!
}
/**
* Используется для обработки результатов, полученных в ответ на запрос, отправленный
* runTest.
* <p>
* @param objects полученные данные
*/
public void dataReponseReceived(ArrayList objects) {
// анализировать все ответы набора, полученные в ответе
for ( int i = 0; i < objects.size(); i++ ) {
PseudoQueue nxtQueue = (PseudoQueue) objects.get(i);
analyseQueue(nxtQueue);
// увеличить индикатор состояния GUI, используемый для отображения выполнения этого теста
getGUIMonitor().worked(1);
}
// вернуть готовые результаты
WMQTestResult[] finalresults = (WMQTestResult[]) testresults.toArray(new WMQTestResult[0]);
testComplete(finalresults);
}
/**
* Анализировать данную очередь. При обнаружении потенциальных неполадок, добавляется
* маркер неполадки к набору результатов теста.
* <p>
* @param queue очередь для анализа
*/
private void analyseQueue(PseudoQueue queue) {
// какие-либо действия
// добавить маркер неполадки к набору
if (problemFound) {
testresults.add(new WMQTestResult(IMarker.SEVERITY_WARNING,
"Найдена неполадка в "
+ queueName,
getQueueManagerName(queue),
getTestSubCategory()));
}
}
}