flash - 是否可以在 Actionscript 中将类型作为变量传递?

标签 flash actionscript-3 unit-testing actionscript prototype

我想要编写的 ActionScript 如下所示:

public function API(requestClass:Type=URLLoader) {
  var req:URLLoader = new requestClass(new URLRequest("some url"));
  req.load(url);
  //etc
}

这样我就可以通过传入 URLLoader 的模拟子类来测试 API 类。这在 Actionscript 的类型系统中似乎是不可能的。

或者,在运行时更改 URLLoader 的 load() 方法就足够了。我对测试方法中的这段代码寄予厚望:

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 类中?我错过了一些明显的事情吗?

最佳答案

您提供的代码中有一些错误,但该概念在 AS3 中完美运行。例如,以下代码可以完美编译并运行:

package {
    import flash.display.Sprite;

    public class Main extends Sprite {
        public function Main():void {
            trace(getDynObj());
            trace(getDynObj(Number));
            trace(getDynObj(String));
        }

        public function getDynObj(requestClass:Class = null):* {
            var req:* = new (requestClass || int)("16.51");
            return req;
        }
    }

}

和输出:

16
16.51
16.51

因此,您的函数需要进行以下修改:

public function API(requestClass:Class = null):void {
    var req:* = new (requestClass || URLLoader)(new URLRequest("some url"));
    //etc
}

注意: URLLoader 不接受纯字符串作为其构造函数参数,您必须将该字符串包装在 URLRequest 对象中。

关于flash - 是否可以在 Actionscript 中将类型作为变量传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/595868/

相关文章:

android - 在 ICS 的 webViewClient 中播放 SWF 文件?

flash - 如何简单地处理 AS3 中的文本?

java - 如何在具有特定时区的 ActionScript 中创建日期?

iOS adobe airrelease构建错误,应用程序无法启动

android - 如何单元测试改造调用?

新标签(CTRL + T),新窗口(CTRL + N)的javascript?

actionscript-3 - AS3 : Conditional statement with a non-boolean variable as the condition

unit-testing - Golang 模拟 Elastic

java - 在 1 个测试方法中使用 junit @Rule、expectMessage()、匹配器来处理多个异常

flash - 如何判断网站上是否加载了 Flash?