答案 0 :(得分:0)
我刚开始使用asyncHandlers并且我一直在采用这种方法,如果你的handleTimerComplete函数触发,那么你可以在该函数中添加你的断言传递,在你声明失败的超时中。
对我来说它的http事件所以在我的“pass”处理程序中我也可以使用assert来检查正确的状态代码等。
我想弄清楚的一件事是你是否可以重复使用相同的异步处理程序,例如:将它作为3或4种不同类型事件的监听器链接起来,到目前为止我认为不是,它似乎第二次调用它得到一个错误,处理函数指针现在为空。需要做更多的调查
答案 1 :(得分:0)
断言基本上是这样做的:
function assertEquals( value:*, ...rest) : void {
for each( var item:* in rest )
if( item != value ) throw new Error("fail");
}
此(伪代码)断言检查传入的参数是否具有预期值,如果不是,则抛出错误。因此,对于可以放置断言的位置实际上没有限制 - 如果不满足某些条件,它们只是会抛出错误的普通旧方法。
单元测试框架在try/catch
块中运行每个测试方法,并且断言引发的任何意外错误都会导致测试失败。这就是其他测试仍然可以继续运行的方式,以及如何获得日志消息和结果,即使出现了可怕的错误。
问题是:如果必须进行异步断言,即稍后检查变量值,则测试框架的行为会变得复杂得多。不知何故,还必须监视在主测试方法结束和测试的实际结束之间发生的所有方法调用,在setUp()
中实例化的对象必须继续存在,并且所有错误仍然必须被抓住 - 否则,整个测试运行器会崩溃,并且你会得到很多“空对象引用”错误。
然而,框架无法知道当前测试何时结束,除非有某种方式表示完整性 - 因此,您必须至少使用一个asyncHandler
(或{{1} } / failOnEvent
,如果你只需要验证一个事件是否被调度/根本没有调度,来处理标记测试结束的事件,即在你的情况下,proceedOnEvent
- 或者失败,如果从未遇到过该事件。在任何一种情况下,现在都可以运行下一个测试。
我相信在同一个测试中使用多个TimerEvent.TIMER_COMPLETE
是可以的,但我不确定如果在循环中多次调用asyncHandlers
将会正常工作 - 这在某种程度上与超时功能相矛盾。
为了保持良好的可读性,并为自己标记您希望测试结束的位置,我建议每次测试只使用一个asyncHandler
- 并将所有其他断言放入“常规”事件处理程序方法。
顺便说一下,如果您对FlexUnit的其余部分如何工作感兴趣,可以找到full source code at GitHub。