2008-08-29 6 views
1

Biz işte burada yaklaşık 6 ay için Flex kullanıyorum ve ben özel bileşenler içeren FlexUnit testlerin ilk toplu halde desen bu tür izleme eğiliminde olacağını ortaya çıkardı: TemeldeFlexUnit bileşen test kalıpları: addAsync'i kullanın veya manuel olarak başlatılıyor mu?

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 
     } 
    } 

yapmanız gerekenler Hakkında herhangi bir şeyi güvenilir bir şekilde doğrulayabilmeniz için bileşenin tam olarak başlatıldığından emin olun ve Flex'te bu, görüntüleme listesine eklendikten sonra senkronize olmayan bir şekilde gerçekleşir. Bu gerçekleştiğinde bildirim almak için bir geri arama (FlexUnit addAsync işlevini kullanarak) kurmanız gerekir.

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... 
     } 

Bu takip etmek çok daha kolaydır:

Son zamanlarda ben sadece manuel yani şimdi benim testleri daha böyle bakmak eğilimindedir, çalışma zamanı gerekli yerlerde sana çağırır yöntemler aradım ama her iki şekilde de hile yaptığımı sanıyordum. İlk vaka, geçerli Uygulamaya (ünite test koşucusu kabuğu uygulaması olacak) çarparak, ikincisi “gerçek” bir ortam değildir.

Diğer insanların bu gibi durumları nasıl ele alacağını merak ediyordum?

cevap

1

Async sürümünü kullanmayla ilgili yanlış bir şey göremiyorum. İkinci versiyonun daha kısa olduğunu kabul edebilirim, ancak takip etmenin daha kolay olduğunu düşündüğümden emin değilim. Test normalde yapamayacağınız pek çok şey yapar, oysa ilk örnek, test ortamının dışındaki bileşenleri nasıl kullanacağınız konusunda daha doğrudur. Ayrıca, ikinci formda, çerçevenin tam olarak ne yapacağını, bir adım atmayı ve testinizin uygun olmadığını ve her bir testin bu kodu tekrarladığını doğrulamanız gerekir. Bana kalırsa, mümkün olduğunca gerçek olana yakın bir durumda test etmek daha iyidir.

public function testLogin():void { 
    var passThroughData:Object = new Object(); 

    passThroughData.username = "myuser1"; 
    passThroughData.password = "somepsswd"; 

    var sequence:SequenceRunner = new SequenceRunner(this); 

    sequence.addStep(new SequenceSetter(form.usernameTI, {text:passThroughData.username})); 
    sequence.addStep(new SequenceWaiter(form.usernameTI, FlexEvent.VALUE_COMMIT, 100)); 

    sequence.addStep(new SequenceSetter(form.passwordTI, {text:passThroughData.password})); 
    sequence.addStep(new SequenceWaiter(form.passwordTI, FlexEvent.VALUE_COMMIT, 100)); 

    sequence.addStep(new SequenceEventDispatcher(form.loginBtn, new MouseEvent("click", true, false))); 
    sequence.addStep(new SequenceWaiter(form, "loginRequested", 100)); 

    sequence.addAssertHandler(handleLoginEvent, passThroughData); 

    sequence.run(); 
} 

(örnek see here for more info, dpUint vikiden):

Sen dpUint 'ın sequences bir göz olabilir, bunlar biraz daha açıklayıcı test bileşeni yaptı.

İlgili konular