これは、非同期呼び出しを行っているもののモック アウト オブジェクトを使用して、同様の問題を解決する方法の高レベルの例になります。明らかに、私はあなたのコードを見ることができないので、正確な例を示すことはできません.
したがって、コメントで述べたように、クラスの依存関係をモックアウトして、非同期呼び出しを偽造して、それらが同期になるようにすることができます。下記のクラスを受講
public class RequiredQuestion extends EventDispatcher
{
private var someAsynchronousObject : IAsynchronousObject;
public function RequiredQuestion(someAsynchronousObject : IAsynchronousObject = null)
{
someAsynchronousObject = someAsynchronousObject || new AsynchronousObject();
someAsynchronousObject.addEventListener(Event.COMPLETE, asyncCallComplete);
}
public function responseSelected(id : String, flag : Boolean) : void
{
//Will asynchronously fire the Event.COMPLETE event
someAsynchronousObject.startAsynchrounsCall();
}
protected function asyncCallComplete(event : Event) : void
{
dispatchEvent(new ResponseChangedEvent(ResponseChangedEvent.RESPONSE_CHANGED));
}
}
したがって、デフォルトでは、someAsynchronousObjec がコンストラクターを介してクラスに注入されない限り、使用したい具象クラスを使用しています。AsycnhronousObject にはおそらく独自の単体テストがあるか、外部クラスにあるため、実際には必要ないか、その機能をテストする必要はありません。これでできることは、動作を偽造するために使用できる IAsynchronousObject を実装するモック オブジェクトを作成することです。ASMock フレームワークを使用すると、テストは次のようになります。
public function testSomething(): void
{
var mockIAsycnhronousObject : IAsynchronousObject =
IAsynchronousObject(mockRepository.createStrict( IAsynchronousObject));
SetupResult.forEventDispatcher(mockIAsycnhronousObject);
SetupResult.forCall(mockIAsycnhronousObject.startAsynchronousCall())
.dispatchEvent(new Event(Event.COMPLETE)); // all calls to the startAsynchronousCall method and dispatch the complete event everytime it's called.
mockRepository.replayAll();
var requiredQuestion : RequiredQuestion = new RequiredQuestion(mockIAsycnhronousObject);
var callCount : int = 0;
requiredQuestion.addEventListener(ResponseChangedEvent.RESPONSE_CHANGED, function(event : ResponseChangedEvent)
{
callCount++;
});
requiredQuestion.responseSelected("1", true);
requiredQuestion.responseSelected("2", true);
assertEquals(2, callCount);
mockRepository.verifyAll();
}
これは、モッキングが単体テストにどのように役立つかを示す一例にすぎません。モックに関する情報は豊富にありますが、ActionScript (12 月にリリース) にとってはまだ非常に新しいものです。ASMock は .net Rhino モックに基づいているため、サポートが必要な場合は、Rhino モックを検索するとさらに多くの結果が表示されます。
間違いなく別の考え方ですが、いったん理解すると、それらなしで単体テストをどのように行ったのか疑問に思う傾向があります.