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
。
最初のオプションは、かなり醜い方法でインターフェイスを変更します。ドキュメンテーションによって解決できます (または名前空間によって解決できる可能性があります。その方法についてはよくわかりません)。
2 番目のものは、私が推測するインターフェイスをわずかに保持しますが、テストに大量の追加コードが必要です。
私が見落としている問題に対する解決策や展望はありますか? よろしくお願いします。