我正在用flexunit 4编写测试用例来测试函数。我正在使用aysnc方法。 但是当我向实例添加两个或更多asyncHandler时。我遇到了问题:错误:异步事件收到了无序。如何解决这个问题?感谢。
代码段:
[Test(order=1, async, description="synchronize content on line")]
public function testSynchronizeContentOnline():void
{
var passThroughData:Object = new Object();
var asyncHandler1:Function = Async.asyncHandler(this, authFailureHandler, 60000, null, timeoutHandler);
var asyncHandler:Function = Async.asyncHandler(this, authSuccessHandler, 60000, null, timeoutHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_SUCCESS,
asyncHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_FAILURE,
asyncHandler1);
caseManager.authenticate("admin", "admin");
trace('test');
}
private function timeoutHandler(event:Event):void
{
Assert.fail( "Timeout reached before event");
}
private var authFailed:Boolean = false;
private function authFailureHandler(event:CaseAuthEvent, passThroughData:Object):void
{
trace("authFailure:" + event.type);
authFailed = true;
}
private var authSucceed:Boolean = false;
private function authSuccessHandler(event:CaseAuthEvent, passThroughData:Object):void
{
trace("authSucceed:" + event.type);
authSucceed = true;
Assert.assertTrue(true);
}
答案 0 :(得分:0)
那是因为你正在为你的测试用例添加顺序,这似乎是在第一个完成之前调度的东西。引用flex单元维基的订购部分:
你的测试需要彼此独立行动,所以重点 以自定义方式排序测试不是为了确保测试A设置 测试B需要的一些状态。如果这是你正在阅读的原因 本节请重新考虑。测试需要独立于每个测试 其他并且通常独立于订单。
我完全赞同。 不应该是您测试中的任何订单。测试本身设定了需要完成的状态。
答案 1 :(得分:0)
如果您测试成功并且单独失败,您的测试将起作用。所以基本上有2个测试,一个为事件成功添加异步处理程序,另一个为事件失败。以下是我接近它们的2个测试的例子......
[Test(async)]
public function testEventSuccess():void
{
var passThroughData:Object = new Object();
var asyncHandler:Function = Async.asyncHandler(this, authSuccessHandler, 60000, null, timeoutHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_SUCCESS,
asyncHandler);
caseManager.authenticate("admin", "admin");
}
[Test(async)]
public function testEventFailure():void
{
var passThroughData:Object = new Object();
var asyncHandler:Function = Async.asyncHandler(this, authFailureHandler, 60000, null, timeoutHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_FAILURE,
asyncHandler);
caseManager.authenticate("admin", "admin");
}
请记住在你的设置函数中创建一个caseManager的新实例,以及在tearDown中删除ref对它的好习惯,就像简单的代码片段所示,我假设caseManager是CaseManager类型。
[Before]
public function setUp():void
{
caseManager = new CaseManager();
}
[After]
public function tearDown():void
{
caseManager = null;
}