Nous utilisons Flex pendant environ 6 mois ici au travail, et j'ai trouvé que mes premiers lots de tests FlexUnit impliquant des composants personnalisés auraient tendance à suivre ce genre de modèle:Modèles de test de composants FlexUnit: utilisez addAsync ou initialisez-vous manuellement?
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
}
}
Fondamentalement, vous devez assurez-vous que le composant a été entièrement initialisé avant de pouvoir vérifier de manière fiable tout ce qui s'y rapporte, et dans Flex cela se produit de manière asynchrone après son ajout à la liste d'affichage. Vous devez donc configurer un rappel (à l'aide de la fonction addAsync de FlexUnit) pour être averti lorsque cela s'est produit.
Dernièrement, j'ai simplement appeler manuellement les méthodes que l'exécution appellerait pour vous dans les endroits nécessaires, maintenant mes tests ont tendance à ressembler à ceci:
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...
}
Cela est beaucoup plus facile à suivre , mais j'ai l'impression de tricher un peu dans les deux sens. Le premier cas est le claquant dans l'application actuelle (qui serait l'application shell de test de l'unité), et ce dernier n'est pas un environnement "réel". Je me demandais comment d'autres personnes pourraient gérer ce genre de situation?