使用asMock,我如何满足SetupResult.forCall中的具体和接口要求

时间:2011-06-07 20:56:23

标签: flex unit-testing testing asmock

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;
                    }
                }
            }

2 个答案:

答案 0 :(得分:1)

我很确定你不能在asMock中做到这两点。由于缺乏多态性,这是Flash Player的限制。

我相信你要做的就是创建一个测试对象,同时执行这两个操作(扩展DisplayObject并实现IValidatable)并创建一个模拟对象。

答案 1 :(得分:0)

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

我同意J_A_X建议创建自定义类然后嘲笑它。