Как использовать SequenceRunner с FlexUnit 4 - PullRequest
2 голосов
/ 11 августа 2010

В FlexUnit wiki Я читал об очень интересном SequenceRunner, который был предоставлен людьми из Fluint. Сейчас я пытаюсь запустить тест, очень похожий на пример, однако при выполнении метода run () экземпляра SequenceRunner я получаю следующее исключение:

    Cannot add asynchronous functionality to methods defined by Test,Before or After that are not marked async
Error: Cannot add asynchronous functionality to methods defined by Test,Before or After that are not marked async
    at org.flexunit.async::AsyncLocator$/getCallableForTest()[C:\Users\dmoor e\Documents\_Production\Flex Unit 4\GIT\FlexUnit4\src\org\flexunit\async\AsyncLocator.as:82]
    at org.fluint.sequence::SequenceWaiter/setupListeners()[C:\Users\dmoore\ Documents\_Production\Flex Unit 4\GIT\FlexUnit4\src\org\fluint\sequence\SequenceWaiter.as:100]
    at org.fluint.sequence::SequenceRunner/continueSequence()[C:\Users\dmoor e\Documents\_Production\Flex Unit 4\GIT\FlexUnit4\src\org\fluint\sequence\SequenceRunner.as:177]
    at org.fluint.sequence::SequenceRunner/run()[C:\Users\dmoore\Documents\_ Production\Flex Unit 4\GIT\FlexUnit4\src\org\fluint\sequence\SequenceRunner.as:124]

Кто-нибудь уже использовал SequenceRunner с FlexUnit 4. Аннотация [Test (async)] уже присутствует.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вот полный, очень простой пример класса теста.

package test
{
    import flash.events.Event;

    import org.flexunit.asserts.assertEquals;

    import org.fluint.sequence.SequenceRunner;
    import org.fluint.sequence.SequenceWaiter;

    public class test_case
    {
        [Test(async)]
        public function test_function():void
        {
            var counter:Object = { count: 0}
            var sr:SequenceRunner = new SequenceRunner(this);
            sr.addStep(new SequenceWaiter(new TestWaiterTarget(counter), "myEvent", 50000));
            sr.addStep(new SequenceWaiter(new TestWaiterTarget(counter), "myEvent", 5000))
            sr.addAssertHandler(test_function_handler, counter);
            sr.run();
        }

        private function test_function_handler(event:Event, passthroughData:*):void
        {
            assertEquals(passthroughData.count, 2);
        }
    }
}

import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.TimerEvent;
import flash.utils.Timer;

class TestWaiterTarget extends EventDispatcher
{
    var timer:Timer = new Timer(250, 1);

    private var _counter:Object;

    public function TestWaiterTarget(counter)
    {
        _counter = counter;
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, timer_timerCompleteHandler);
        timer.start();
    }

    private function timer_timerCompleteHandler(event:TimerEvent):void
    {
        _counter.count++;
        dispatchEvent(new Event("myEvent"));
    }
}
0 голосов
/ 13 октября 2010

Спасибо Майклу Лабриоле, который ответил на мой вопрос на форуме Adobe . Я наконец смог запустить его.Обратите внимание, что документация SequenceRunner в Wiki устарела и частично неверна.

  1. Не наследуйте ни от одного класса TestCase.CREATION_COMPLETE в настройках.Вместо этого добавьте SequenceWaiter в тест, который ожидает событие CREATION_COMPLETE компонента
  2. Тест должен быть помечен как асинхронный тест, поэтому добавьте метаданные [Test(async)] в тестовые случаи, использующие SequenceRunner.
...