0

ValidationManager 有一个公共 Dictionary 用于存储实现 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);

我的问题出在命令的执行方法中。它检查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

“multimock”的概念当然是可能的,但是 floxy(asmock 用来生成动态代理的框架)不支持它。我之前考虑过添加对它的支持,但是很难通过各种Mock元数据公开,并且还有其他问题需要担心(例如方法名称冲突)。

我同意 J_A_X 关于创建自定义类然后对其进行模拟的建议。

于 2011-06-08T12:45:20.963 回答