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()));
}
}
}