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;
}
}
}
答案 0 :(得分:1)
我很确定你不能在asMock中做到这两点。由于缺乏多态性,这是Flash Player的限制。
我相信你要做的就是创建一个测试对象,同时执行这两个操作(扩展DisplayObject并实现IValidatable)并创建一个模拟对象。
答案 1 :(得分:0)
“multimock”的概念当然是可能的,但是floxy(asmock用来生成动态代理的框架)不支持它。我之前曾考虑过添加对它的支持,但是很难通过各种Mock
元数据进行公开,并且还需要担心其他问题(比如方法名称冲突)。
我同意J_A_X建议创建自定义类然后嘲笑它。