1

我在有效测试进行 Web 服务调用的 AS3 类时遇到了概念上的困难。采取以下示例代码:

class ServiceWrapper extends EventDispatcher
  public function doStuff():void {
    var loader:URLLoader = new URLLoader;
    var request:URLRequest = new URLRequest();
    request.url = 'http://myapiendpoint.com/foo';
    var self:ServiceWrapper = this;
    loader.addEventListener(Event.COMPLETE, function(event:Event):void {
      if(loader.data == 'success') {
        this.dispatchEvent('stuffDone');
      } else {
        this.dispatchEvent('stuffNotDone');
      }
    });
    loader.load(request);
  }
end

我只是想测试一下,如果服务返回“成功”,则实例分派一个stuffDone事件类型,否则分派一个stuffNotDone.

看起来如果不在应用程序代码中公开“测试接口”,就无法模拟 Web 服务响应。例如,我想到了以下示例:

  • 将其设为loader公共属性或从公共返回,并在测试中将其替换为模拟。
  • 使loader或 生成它的函数受保护并定义一个私有类,该类扩展ServiceWrapper以提供对loader.

第一个选项以非常丑陋的方式修改了界面。它可以通过文档解决(或者可能通过命名空间;不太确定如何去做),如果这是唯一的选择,我很好,但我觉得应该有更好的方法。

第二个稍微更好地保留了我认为的接口,但在测试中需要大量额外的代码。

对于我忽略的问题,是否有一些解决方案或观点?提前感谢您的帮助。

4

1 回答 1

1

您的第一个选择应该是要走的路:模拟装载机。

始终建议不要在可重用类中包含对象创建代码,除非创建的实例严格保持私有并且仅与创建它们的类交互 - 使用外部服务时绝不会出现这种情况。相反,将加载器作为构造函数参数传递 - 这样,您可以确定在调用它时它已被创建。

对象创建应该发生在您的主分区内,如果不是通过依赖注入框架,即必须为每个新应用程序重写的系统部分。

也不需要额外的文档:您需要的所有文档都在您的单元测试中。

于 2012-05-16T16:39:29.373 回答