Мы используем 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 это происходит асинхронно после его добавления в список отображения. Поэтому вам нужно настроить обратный вызов (используя функцию addAsync FlexUnit), чтобы получать уведомления, когда это происходит.
В последнее время я просто вручную вызывал методы, которые среда выполнения вызывала бы вас в нужных местах, так что теперь мои тесты выглядят примерно так:
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...
}
За этим намного легче следовать, но вроде как я немного изменяю в любом случае. В первом случае это встраивается в текущее приложение (которое будет представлять собой приложение оболочки модульного теста), а второе не является «реальной» средой.
Мне было интересно, как другие люди справятся с такой ситуацией?