我们在工作中已经使用 Flex 大约 6 个月了,我发现我的第一批涉及自定义组件的 FlexUnit 测试倾向于遵循这种模式:
import mx.core.Application;
import mx.events.FlexEvent;
import flexunit.framework.TestCase;
public class CustomComponentTest extends TestCase {
private var component:CustomComponent;
public function testSomeAspect() : void {
component = new CustomComponent();
// set some properties...
component.addEventListener(FlexEvent.CREATION_COMPLETE,
addAsync(verifySomeAspect, 5000));
component.height = 0;
component.width = 0;
Application.application.addChild(component);
}
public function verifySomeAspect(event:FlexEvent) : void {
// Assert some things about component...
}
override public function tearDown() : void {
try {
if (component) {
Application.application.removeChild(component);
component = null;
}
} catch (e:Error) {
// ok to ignore
}
}
基本上,您需要确保组件已完全初始化,然后才能可靠地验证有关它的任何内容,而在 Flex 中,这在将其添加到显示列表后异步发生。因此,您需要设置一个回调(使用 FlexUnit 的 addAsync 函数)以便在发生这种情况时得到通知。
最近我只是在必要的地方手动调用运行时会为你调用的方法,所以现在我的测试看起来更像这样:
import flexunit.framework.TestCase;
public class CustomComponentTest extends TestCase {
public function testSomeAspect() : void {
var component:CustomComponent = new CustomComponent();
component.initialize();
// set some properties...
component.validateProperties();
// Assert some things about component...
}
这更容易理解,但有点像我在作弊。第一种情况是将其撞到当前的应用程序(这将是单元测试运行器外壳应用程序)中,后者不是“真实”环境。
我想知道其他人会如何处理这种情况?