2011-05-23 90 views
1

嘿傢伙!
我們用FlexUnit編寫UnitTests,我們只是測試我們的模型。現在我們也想測試視圖。在我運行測試之前,我創建了一個我的視圖和我的模型的實例來測試這些東西。當我嘗試訪問視圖時,我得到一個空指針異常。如果我將視圖添加到顯示列表中,它以某種方式起作用 - 即使我在添加後從列表中刪除它。實例化視圖將不起作用

它看起來是這樣的:

var myView: MyView = new myView(); 
//myView.initialize(); will throw error 
Application.application.addChild(view); 
Application.application.removeChild(view); 
myView.initialize(); // will work 


希望你可以給我一個提示。

西姆斯

回答

3

的Flex UIComponents的不通過組件的生命週期走,他們被添加到容器後,直到。因此,變量可能不會被初始化,並且如果您從不將其添加到容器中,則可能不會創建子項。

有關Flex Component LifeCycle的更多信息。將組件添加到容器後,您會注意到有11個步驟。

我懷疑添加它然後刪除它可能會導致其他問題,但這取決於您要測試的內容。

要知道您的確切錯誤,我們必須查看視圖上初始化方法中的代碼。它最有可能訪問尚未創建的孩子。

MXML組件通常會掩蓋生命週期步驟,但組件仍然會通過它們。

我希望這有助於;但由於您沒有提出問題,我不確定這是否是您之後的信息。

+0

+1。當你發佈這個消息時,我寫了幾乎相同的答案。在測試生命週期外實例化視圖是一個壞主意。如果他們沒有在環境中生活,他們是爲(生命週期)而設計的,那麼你就不知道他們的行爲是否正確。如果你不知道他們的行爲是否正常,單元測試失去了可靠性。考慮一種不同的方法,如視圖/行爲分離或用於測試視圖的功能測試工具。 – 2011-05-23 12:19:34

+0

感謝您的回答。 也許我不得不說,這只是嘗試,因爲有許多FlexUnit測試,但他們只測試模型和應用程序的某些部分沒有模型,這是我的部分開始 - 測試GUI。
FlexMonkey出現了,但它似乎與FlexUnit非常相似 - (我可以問另一個問題^^)是否有一種方法可以將FlexUnit和Flexmonkey混合? – Sims 2011-05-23 12:29:34

+0

@Sims我沒有看到FlexMonkey與FlexUnit類似。據我所知,可以將FlexMonkey測試保存爲AS3;並從那裏從FlexUnit跑步者中觸發它們。儘管如此,這並不是我親身體驗過的。 – JeffryHouser 2011-05-23 12:39:06

1

除了什麼(www.Flextras.com)寫的,我也要發佈,以及您可能會考慮採用不同的方法來測試您的意見。

首先,考慮像Presentation Model,MVP或MVC這樣的分離模式。它們允許您將視圖與視圖行爲分開,並測試與視圖分開的行爲。像這樣的方法,如果正確完成,將會使您走很長的路,因爲您可以最大限度地減少或消除視圖中的AS3代碼。

如果你真的想測試你的觀點,我會建議你使用這個功能測試工具。單元測試框架適用於單獨測試類。一旦開始談論複雜生命週期的視圖,功能測試框架開始變得有意義。

查看FlexMonkey作爲Flex的功能性UI測試框架的示例。

+1

對FlexMonkey的建議+1。其他類似的選項是QTP和RIATest。 – JeffryHouser 2011-05-23 12:21:50

0

我建議您使用用戶界面外觀herehere。此功能專爲UI組件測試而設計。