2 Stimmen

Verwendung von SequenceRunner mit FlexUnit 4

In der FlexUnit-Wiki Ich habe über den sehr interessanten SequenceRunner gelesen, der von den Fluint-Leuten beigesteuert wurde. Jetzt versuche ich, einen Test auszuführen, der dem Beispiel sehr ähnlich ist. Wenn ich jedoch die run()-Methode der SequenceRunner-Instanz ausführe, erhalte ich diese Ausnahme:

    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]

Hat schon jemand den SequenceRunner mit FlexUnit 4 verwendet. Die [Test(async)] Annotation ist bereits vorhanden.

1voto

sksizer Punkte 221

Hier ist ein vollständiges, sehr einfaches Beispiel einer Testfallklasse.

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

0voto

Yaba Punkte 5949

Dank an Michael Labriola, der auf meine Frage in der Adobe-Forum Endlich konnte ich es zum Laufen bringen. Beachten Sie, dass die Dokumentation von SequenceRunner im Wiki ist veraltet und teilweise falsch.

  1. Sie erben nicht von einer TestCase-Klasse.
  2. Überspringen Sie den asyncHandler für CREATION_COMPLETE im SetUp. Fügen Sie stattdessen eine SequenceWaiter in dem Test, der auf die CREATION_COMPLETE Ereignis der Komponente
  3. Der Test muss als asynchroner Test gekennzeichnet werden, also fügen Sie die [Test(async)] Metadaten zu Testfällen, die Folgendes verwenden SequenceRunner .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X