Wie verwenden SequenceRunner mit Flexunit 4
-
27-09-2019 - |
Frage
In der Flexunit-Wiki Ich habe über die sehr gelesen interessant SequenceRunner, die von den Fluint Leute beigetragen wurde. Jetzt versuche ich, einen Test auszuführen, die zum Beispiel sehr ähnlich ist, aber wenn der run () Methode der SequenceRunner Instanz ausgeführt wird, 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 jemand die SequenceRunner mit Flexunit 4 bereits verwendet. Die [Test (async)] Anmerkung bereits vorhanden ist.
Lösung 2
Danke an Michael Labriola, die auf meine Frage geantwortet in dem Adobe Forum ich war schließlich in der Lage, um es läuft zu machen. Beachten Sie, dass die Dokumentation der SequenceRunner
im Wiki und teilweise falsch veraltet ist.
- Do von jeder Klasse Testcase nicht erben.
- Skip the asyncHandler für
CREATION_COMPLETE
im setUp. Eher einenSequenceWaiter
im Test hinzufügen, dass wartet auf dasCREATION_COMPLETE
Ereignis der Komponente - Der Test als asynchroner Test markiert werden muß, um die
[Test(async)]
Metadaten zu Testfällen hinzufügen, dass die VerwendungSequenceRunner
.
Andere Tipps
Dies ist die komplette, sehr einfache Beispiel Testfall-Klasse.
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"));
}
}