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;
}
}
}发布于 2011-06-08 05:10:30
我非常确定你不能在asMock中同时做这两件事。这是Flash播放器的一个限制,因为它缺乏多态性。
我相信你要做的就是创建一个测试对象来同时做这两件事(扩展DisplayObject和实现IValidatable),并创建一个模拟对象。
发布于 2011-06-08 20:45:21
"multimock“的概念当然是可能的,但是floxy ( asmock用来生成动态代理的框架)不支持它。我之前考虑过添加对它的支持,但它很难通过各种Mock元数据公开,而且还有其他问题需要担心(比如方法名称冲突)。
我同意J_A_X的建议,即创建一个自定义类,然后对其进行模拟。
https://stackoverflow.com/questions/6271552
复制相似问题