Moim zadaniem jest przetestowanie działania zdalnych metod
Java uruchamianych w
Flex, np.:
netConnection.call( "calculatorService.add", new Responder( onAdd ), 2, 2 );
Do tworzenia testów jednostkowych w Flex zalecana jest biblioteka
FlexUnit. Wkładając ten kod do FlexUnit, zauważmy, że nie radzi on sobie
z metodami asynchronicznymi – chyba że je specjalnie zaznaczymy:
netConnection.call( "calculatorService.add", new Responder( addAsync(onAdd,5000) ), 2, 2 );
Jednak to jeszcze nie działa. Metoda
addAsync dostosowana jest do pracy z zdarzeniami. Próbując uruchomić ten kod otrzymam błąd:
TypeError: Error #1034: Type Coercion failed: cannot convert "4" to flash.events.Event. Poradziłem sobie z tym w następujący sposób:
netConnection.call("calculatorService.add", new Responder( myAddAsync( testSum ) ), 2, 2 );
public function testSum(a:Number):void {
assertEquals(4,a);
}
//
public function myAddAsync(f:Function):Function {
// wyciąga dane z eventa
var f1:Function = function(e:DynamicEvent):void {
f.call(this,e.result);
}
// buduje asynchroniczną funkcję, operującą na zdarzeniach
var f2:Function = addAsync(f1, 5000);
// pakuje odpowiedź serwera do zdarzenia
var f3:Function = function(a:*):void {
var e:DynamicEvent = new DynamicEvent("MyDynamicEvent");
e.result = a;
f2.call(this, e);
}
return f3;
}
Ta ostatnia funkcja wygląda dość dziwnie – ale robi to co musi. Daje mi możliwość budowania testów integracyjnych – współpraca Flex’a z serwerem Red5.