Используя asMock, как я могу удовлетворить конкретные и интерфейсные требования в SetupResult.forCall - PullRequest
0 голосов
/ 08 июня 2011

В ValidationManager есть общедоступный словарь для хранения компонентов пользовательского интерфейса, которые реализуют интерфейс IValidatable.

Я тестирую командный класс, которому требуется экземпляр 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;
                    }
                }
            }

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Я вполне уверен, что вы не можете сделать оба в asMock.Это ограничение Flash Player из-за отсутствия полиморфизма.

Я считаю, что вам нужно создать тестовый объект, который одновременно выполняет (расширяет DisplayObject и реализует IValidatable) и создает фиктивный объект для этого.

0 голосов
/ 08 июня 2011

Понятие «multimock», безусловно, возможно, но floxy (фреймворк, который asmock использует для генерации динамических прокси) не поддерживает его. Ранее я рассматривал возможность добавления поддержки для него, но было бы трудно разобраться с помощью различных метаданных Mock, и есть другие проблемы, о которых нужно беспокоиться (например, конфликты имен методов).

Я согласен с рекомендацией J_A_X создать собственный класс, а затем высмеивать его.

...