Pisanie własnych testów: przykład 3

Poniższy kod źródłowy jest przykładem testu przedstawiającym asynchroniczne podejście do wykonywania żądań i przetwarzania danych.


/*                                                    
 * Materiały licencjonowane - własność IBM
 *  
 * 5724-H72, 5655-L82, 5724-L26, 5655R3600
 * 
 * (c) Copyright IBM Corp. 2005, 2020
 * 
 * Zastrzeżone prawa instytucji rządowych USA - Korzystanie, powielanie lub
 * ujawnianie zastrzeżone kontraktem GSA ADP Schedule Contract z firmą IBM Corp.
 */
package com.ibm.mq.explorer.tests.sample;

/**
 * Przykładowy pseudokod przedstawiający asynchroniczne podejście do implementowania
 * testu. 
 */
public class QueuesTest extends WMQTest implements SomeListener {

    /** Używane do przechowywania wyników testu. */
    private ArrayList testresults = new ArrayList();

    /**
     * Używane do uruchomienia testu.
     * <p>
     * @param callback - uchwyt do mechanizmu testów wykonującego test
     * @param guimonitor - uchwyt do obiektu monitorującego test, 
     *                          umożliwiający testowi okresowe sprawdzanie,
     *                          czy użytkownik próbował anulować działający test    
     */
    public void runTest(WMQTestEngine callback, IProgressMonitor guimonitor, MQExtObject[] contextObjects, TreeNode  treenodeId) {

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

        // Zresetuj wszystkie składnice testu
        testresults = new ArrayList();

        // Zainicjuj część GUI stanowiącą pasek postępu używany do przedstawiania postępu
        //  wykonywania testu
        guimonitor.beginTask(getTestName(), numqmgrs);

        // Uruchom test!

        // Wyślij zapytanie
        PseudoQueueManager qmgrHandle = pseudoGetQueueManager();
        submitQmgrQuery(qmgrHandle, this, query);

        // Zakończono wykonywanie metodą runTest, ale wykonywanie testu nie zostało zakończone!                
    }


    /**
     * Używane do przetwarzania wyników otrzymanych w odpowiedzi na zapytanie wprowadzone przy użyciu metody
     * runTest.
     * <p>
     * @param objects          otrzymane dane 
     */
    public void dataReponseReceived(ArrayList objects) {

        // Dokonaj analizy poszczególnych odpowiedzi znajdujących się w kolekcji otrzymanej w odpowiedzi
        for ( int i = 0; i < objects.size(); i++ ) {
            PseudoQueue nxtQueue = (PseudoQueue) objects.get(i);
            analyseQueue(nxtQueue);

            // Zwiększ wartość na pasku postępu GUI używanym do przedstawiania postępu testu
            getGUIMonitor().worked(1);
        }

        // Zwróć skompletowane wyniki
        WMQTestResult[] finalresults = (WMQTestResult[]) testresults.toArray(new WMQTestResult[0]);
        testComplete(finalresults);
    }



    /**
     * Analizuj daną kolejkę. Dla każdego odnalezionego problemu do kolekcji wyników testu
     * dodawany jest znacznik problemu.
     * <p>
     * @param queue       kolejka do analizy
     */
    private void analyseQueue(PseudoQueue queue) {

        // Wykonaj czynność

        // dodaj znacznik problemu do kolekcji
        if (problemFound) {
            testresults.add(new WMQTestResult(IMarker.SEVERITY_WARNING,
                                              "A problem was found with " 
                                                + queueName,
                                              getQueueManagerName(queue),
                                              getTestSubCategory()));
        }
    }    
}