Escribir sus propias pruebas: Ejemplo 3

El siguiente código fuente es un ejemplo de una prueba que muestra un enfoque asíncrono para solicitar datos y procesar datos.


/*                                                    
 * Material bajo licencia - Propiedad de IBM
 *  
 * 5724-H72, 5655-L82, 5724-L26, 5655R3600
 * 
 * (c) Copyright IBM Corp. 2005, 2020
 * 
 * Derechos restringidos a los usuarios de gobierno de EE.UU. -
 * Utilización, duplicación o divulgación restringida por el
 * GSA ADP Schedule Contract con IBM Corp.
 */
package com.ibm.mq.explorer.tests.sample;

/**
 * Ejemplo de pseudocódigo que demuestra un enfoque asíncrono para implementar
 * una Prueba. 
 */
public class QueuesTest extends WMQTest implements SomeListener {

    /** Se utiliza para almacenar resultados de la prueba. */
    private ArrayList testresults = new ArrayList();

    /**
     * Se utiliza para iniciar la prueba.
     * <p>
     * @param callback      manejador para el motor de pruebas que ejecuta la prueba
     * @param guimonitor    un manejador para el objeto que supervisa la prueba, que 
     *                      se proporciona para permitir que la prueba compruebe periódicamente
     *                      si el usuario ha intentado cancelar la prueba en ejecución    
     */
    public void runTest(WMQTestEngine callback, IProgressMonitor guimonitor, MQExtObject[] contextObjects, TreeNode  treenodeId) {

        super.runTest(callback, guimonitor, contextObjects, treenodeId);

        // restablecer todos los almacenes de pruebas
        testresults = new ArrayList();

        // inicializar la parte de barra de progreso de la GUI utilizada para mostrar el progreso
        //  de esta prueba
        guimonitor.beginTask(getTestName(), numqmgrs);

        // !iniciar la prueba!

        // enviar consulta
        PseudoQueueManager qmgrHandle = pseudoGetQueueManager();
        submitQmgrQuery(qmgrHandle, this, query);
        
        // observe que el método runTest ya ha finalizado, pero la prueba no ha terminado.                
    }


    /**
     * Se utiliza para procesar los resultados recibidos en respuesta a la
     * consulta sometida por runTest.
     * <p>
     * @param objects          datos recibidos 
     */
    public void dataReponseReceived(ArrayList objects) {

        // analizar cada una de las respuestas de la colección recibida en la respuesta
        for ( int i = 0; i < objects.size(); i++ ) {
            PseudoQueue nxtQueue = (PseudoQueue) objects.get(i);
            analyseQueue(nxtQueue);

            // incrementar barra de progreso de GUI utilizada para mostrar el progreso de esta prueba
            getGUIMonitor().worked(1);
        }

        // devolver los resultados completados
        WMQTestResult[] finalresults = (WMQTestResult[]) testresults.toArray(new WMQTestResult[0]);
        testComplete(finalresults);
    }



    /**
     * Analizar la cola especificada. Si se encuentra algún problema potencial, 
     * se añade un indicador de problema a la colección testresults.
     * <p>
     * @param queue       cola a analizar
     */
    private void analyseQueue(PseudoQueue queue) {

        // hacer algo

        // añadir un indicador de problema a la colección
        if (problemFound) {
            testresults.add(new WMQTestResult(IMarker.SEVERITY_WARNING,
                                              "Se ha encontrado un problema con " 
                                                + queueName,
                                              getQueueManagerName(queue),
                                              getTestSubCategory()));
        }
    }    
}