Написание собственных тестов, Пример 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()));
        }
    }    
}