Cómo utilizar SequenceRunner con FlexUnit 4
-
27-09-2019 - |
Pregunta
En el FlexUnit wiki que he leído sobre el mismo SequenceRunner interesante que fue aportada por la gente Fluint. Ahora estoy tratando de ejecutar una prueba de que es muy similar a la del ejemplo, sin embargo cuando se ejecuta el método run () de la instancia SequenceRunner, consigo esta excepción:
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]
¿Alguien ha utilizado el SequenceRunner con FlexUnit 4 ya. El [Test (asíncrono)] anotación ya está presente.
Solución 2
Gracias a Michael Labriola, quien respondió a mi pregunta en el Adobe Foro Por fin pude hacer que funcione. Tenga en cuenta que la documentación de SequenceRunner
en el Wiki es anticuado y parcialmente equivocado.
- No hereda de ninguna clase TestCase.
- Saltar la asyncHandler para
CREATION_COMPLETE
en la configuración. Más bien añadir unSequenceWaiter
en la prueba que se espera para el eventoCREATION_COMPLETE
del componente - La prueba debe ser marcado como prueba asíncrona, por lo que añadir el
[Test(async)]
metadatos a los casos de prueba que el usoSequenceRunner
.
Otros consejos
Aquí hay un ejemplo muy simple clase completa, caso de prueba.
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"));
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow