首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlexUnit4异步测试-异步处理程序的用法不明确

FlexUnit4异步测试-异步处理程序的用法不明确
EN

Stack Overflow用户
提问于 2010-07-24 23:10:20
回答 2查看 576关注 0票数 2

有关于FlexUnit4的异步方法的文档页面:http://docs.flexunit.org/index.php?title=Writing_an_AsyncTest

这是一个让我感到困惑的概念:

代码语言:javascript
复制
// timer is a Timer instance set to tick once with a delay of TIMER_TIME.

[Test(async)]
public function testAsync() : void {
      var asyncHandler:Function = Async.asyncHandler( this, handleTimerComplete, ASYNC_TIME, null, handleTimeout );
      timer.addEventListener(TimerEvent.TIMER_COMPLETE, asyncHandler, false, 0, true );
      timer.start();    
}

当timer对象完成时(在TIMER_TIME之后),将调用handleTimerComplete。只有当TIMER_TIME < ASYNC_TIME时才会发生。如果asyncHandler已完成,则调用handleTimeout (在ASYNC_TIME之后)。如果ASYNC_TIME < TIMER_TIME就会发生这种情况。

这对我来说真的没什么意义。我希望周期性地调用有时间限制的测试函数,一旦测试成功,周期性调用就应该成功完成。另一方面,我不确定把动作放在哪里(我想测试什么),也不确定把测试放在哪里(断言)。

是否有更详细的文档或示例来阐明该方法?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-12-02 20:22:46

我刚刚开始使用asyncHandlers,我一直在使用这样一种方法:如果你的handleTimerComplete函数触发,那么你可以在那个函数中添加你的断言传递,在你断言失败的超时时间。

对我来说,它是http事件,所以在我的"pass“处理程序中,我还可以使用assert来检查正确的状态代码等。

我试图弄清楚的一件事是,你是否可以重用同一个异步处理程序,例如,将它链接为3或4个不同类型的事件的侦听器,到目前为止,我认为不能,似乎在第二次调用它时,你会得到一个错误,即处理程序函数指针现在为空。但我需要做更多的调查

票数 0
EN

Stack Overflow用户

发布于 2012-12-03 00:28:24

断言基本上是这样做的:

代码语言:javascript
复制
function assertEquals( value:*, ...rest) : void {
    for each( var item:* in rest ) 
        if( item != value ) throw new Error("fail");
}

这个(伪代码)断言检查传入的参数是否有期望值,如果没有,就抛出一个错误。因此,你可以把断言放在哪里真的没有限制-它们只是普通的旧方法,如果某些条件不满足,就会抛出错误。

单元测试框架在try/catch块中运行每个测试方法,断言抛出的任何意外错误都会导致测试失败。这就是其他测试仍然可以继续运行的原因,以及您如何获得日志消息和结果,即使发生了严重的错误。

问题是:如果您必须进行异步断言,即在稍后的某个时间点检查变量值,那么测试框架的行为将变得更加复杂。以某种方式,在主测试方法结束和测试实际结束之间发生的所有方法调用也必须受到监视,在setUp()中实例化的对象必须继续存在,并且必须仍然捕获所有错误-否则,整个测试运行器将崩溃,并且您将得到大量“空对象引用”错误。

然而,框架无法知道当前测试何时结束,除非有某种方法来表示完成-因此,您必须使用至少一个asyncHandler (或failOnEvent/proceedOnEvent,如果您只需要验证事件是否已调度/根本未调度)来处理标记测试结束的事件,即在您的示例中为TimerEvent.TIMER_COMPLETE -或者失败,如果从未遇到该事件。在这两种情况下,现在都可以运行下一个测试。

我相信在同一个测试中使用多个asyncHandlers是可以的,但是如果在一个循环中多次调用,我不确定一个asyncHandler是否能正常工作--这在某种程度上与超时功能相矛盾。

为了保持良好的可读性,并标记您希望测试结束的位置,我建议每个测试只使用一个asyncHandler -并将所有其他断言放入“常规”事件处理程序方法中。

顺便说一句,如果你对FlexUnit的其余部分是如何工作的感兴趣,你可以找到full source code at GitHub

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3325597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档