0

ValidationManagerには、IValidatableインターフェイスを実装するUIコンポーネントを格納するためのパブリックディクショナリがあります。

ValidationManagerのインスタンスを必要とするコマンドクラスをテストしていますが、検証に失敗させたいです。したがって、ValidationManagerの「validateItem()」メソッドを次のようにオーバーライドします。

var validationManagerRepos:ValidationManager = ValidationManager(mockRepository.createStub(ValidationManager));
var validationItem:IValidatable = IValidatable(mockRepository.createStub(IValidatable));

var validatableItems:Dictionary = new Dictionary();
validatableItems[validationItem] = false;

SetupResult.forCall(validationManagerRepos.validateItem(validationItem)).returnValue(false);

私の問題は、コマンドのexecuteメソッドにあります。これは、validationItemがDisplayObject(isVisble)とIValidatableの両方であるかどうかを確認します。型指定されたオブジェクトとインターフェースをスタブ化するための巧妙な方法はありますか?または、すでに両方を満たしている既存のオブジェクトのインスタンスを作成する必要がありますか?

for (var iVal:Object in validationManager.validatableItems)
            {
                if (isVisible(DisplayObject(iVal)))
                {
                    passed = validationManager.validateItem(IValidatable(iVal));
                    eventDispatcher.dispatchEvent(new ValidationEvent(ValidationEvent.VALIDATE_COMPLETED, IValidatable(iVal), passed));
                    if (!passed)
                    {
                        allPassed = false;
                    }
                }
            }
4

2 に答える 2

1

asMock 内で両方を行うことはできないと確信しています。これは、ポリモーフィズムの欠如による Flash Player の制限です。

あなたがしなければならないことは、(DisplayObject の拡張と IValidatable の実装) の両方を行うテスト オブジェクトを作成し、そのモック オブジェクトを作成することだと思います。

于 2011-06-07T21:10:29.740 に答える
0

「マルチモック」の概念は確かに可能ですが、floxy (asmock が動的プロキシを生成するために使用するフレームワーク) はそれをサポートしていません。以前はサポートを追加することを検討していましたが、さまざまなメタデータを介して公開するのは難しく、Mock他にも懸念すべき問題 (メソッド名の衝突など) があります。

カスタムクラスを作成してからそれをモックするという J_A_X の推奨事項に同意します。

于 2011-06-08T12:45:20.963 に答える