ActionScript, который я хочу написать, выглядит следующим образом:
public function API(requestClass:Type=URLLoader) {
var req:URLLoader = new requestClass(new URLRequest("some url"));
req.load(url);
//etc
}
чтобы я мог протестировать класс API, передав имитируемый подкласс URLLoader. Это не представляется возможным в системе типов Actionscript.
В качестве альтернативы может быть достаточно изменить метод load () URLLoader во время выполнения. У меня были большие надежды на этот код в тестовом методе:
var b:Array = [];
URLLoader.prototype.load = function(u:URLRequest):void {
b.push(u);
}
(new URLLoader()).load(new URLRequest("http://localhost"));
assertEquals(b.length, 1);
но URLLoader на самом деле вызывает указанный ему URL, а b.length == 0.
Так! Можно ли как-нибудь написать свой класс API для тестирования, не помещая логику тестирования в мой класс API? Я что-то упустил очевидное?