https://www.adobe.com/devnet/flex/articles/flashbuilder4_tdd.html
要求
必備知識
所需産品 示例檔案
建議您建構Flex應用程式的經驗。
Flash Builder (下載下傳試用版) flashbuilder_tdd_source.zip (6317 KB)
使用者級别
所有
在本文中,我将介紹使用Flash Builder 4和FlexUnit開始測試驅動開發(TDD)的一些基礎知識。
随着Flash應用程式變得更加動态和複雜,它們變得更難以維護和擴充,尤其是在整個開發過程中業務需求發生變化時。這些挑戰非常重要,它們在所有類型的開發中都很常見,包括移動,Web和桌面應用程式。
考慮一種場景,您需要對大型應用程式進行更改以滿足新的業務需求。您如何知道您所做的小改動是否打破了應用程式的其他部分?如何確定代碼是防彈的,特别是如果您不是編寫代碼的人?
對于軟體工程師來說,這個問題既不是新問題,也不局限于特定平台。Java和ASP開發人員面臨着同樣的問題,并且發現測試驅動開發(TDD)是一種用于建立易于維護的應用程式的有用技術。
Flash已經從一個小型動畫工具中走了很長一段路。Adobe Flash Platform現在包含符合ECMAScript的程式設計語言以及建構大型動态應用程式所必需的其他程式設計語言的通用方法。事實上,Adobe和許多其他公司已經發現TDD解決了開發人員每天在開發周期中面臨的許多挑戰。
我注意到雖然許多開發人員都聽說過TDD,但他們不願意使用TDD,因為他們不熟悉TDD,并擔心使用TDD會增加開發時間。
根據我的個人經驗,我發現正确使用TDD不會增加開發時間,因為它适用于适合的項目。實際上,TDD可以縮短開發時間并簡化應用程式維護。我還發現我可以在現有應用程式上使用FlexUnit,并以某種方式将TDD方法應用于任何架構。
值得注意的是,即使有單獨的品質保證(QA)部門執行正式測試,TDD也适用。TDD幫助開發人員提供更加可靠的代碼,使QA能夠專注于其他任務,包括測試使用者界面和建立他們需要測試的用例。
測試驅動開發概述
那麼什麼是TDD呢?測試驅動開發是一種軟體開發技術,程式員編寫失敗的測試,在編寫實際代碼之前定義功能。
在極限程式設計團隊中,團隊負責開發具有不斷變化的需求的動态項目,以及包含TDD的開發周期,用于在代碼本身之前編寫測試。請注意,TDD不是完整的開發周期; 它隻是極限程式設計(XP)開發範例的一部分。在編寫代碼之前準備測試有助于開發團隊以小步驟展示他們的工作,而不是讓客戶或其他利益相關者等待完整的結果。
以小增量移動還可以更輕松地滿足不斷變化的需求,并有助于確定您的代碼能夠完成所需的操作,僅此而已。值得一提的是,TDD技術的重點是生成代碼而不是建立測試平台。測試能力是一個額外的好處。
TDD基于這樣的想法,即您建構的任何内容都應該進行測試,如果您無法測試它,您應該三思而後行,是否真的要建構它。
使用FlexUnit 4應用TDD技術
檔案
圖1.測試驅動開發周期
TDD過程包括六個簡單步驟(參見圖1):
添加測試 -第一步是了解業務需求,考慮所有可能的方案,并根據這些方案添加測試。如果要求不夠清楚,您可以立即提出問題,而不是在軟體完成時提出問題,并且需要更多的努力來進行更改。
寫入失敗的單元測試 -此階段確定測試單元本身正常工作。它不會通過,因為您還沒有編寫任何代碼。
編寫代碼 -在此階段,您将以最簡單,最有效的方式編寫代碼,以確定測試通過。無需包含任何設計模式,考慮應用程式的其餘部分或清理代碼。您的目标隻是通過測試。
測試通過 -一旦您編寫了所有代碼和測試通過,您就會知道您的測試符合所有業務要求,您可以與客戶或團隊的其他成員共享工作。
重構 -現在測試已經完成,并且您确認它符合業務要求,您可以通過替換任何臨時參數,添加設計模式,删除重複代碼以及建立類來高效地完成工作來確定代碼已準備好進行生産。 。理想情況下,一旦重構階段完成,代碼将經過代碼審查,這對于確定代碼處于良好狀态并符合公司的編碼标準至關重要。在重構和代碼審查之後,應該再次運作測試以確定過程中沒有任何内容被破壞。
重複 -單元測試完成後,您可以轉到下一個單元測試并與客戶或團隊的其他成員共享代碼。
使用FlexUnit測試Flex和ActionScript項目
FlexUnit是Flex和ActionScript 3.0應用程式和庫的單元測試架構。它提供類似于JUnit的功能,JUnit是一個Java單元測試架構。FlexUnit用于許多内部Adobe項目,并且是開源的。
Flash Builder 4提供了內建的FlexUnit支援,允許您自動建立測試單元的腳手架,節省您的時間,無需一遍又一遍地建立相同的類,并確定使用最佳實踐。
FlexUnit有兩個版本:FlexUnit 0.9(也稱為FlexUnit 1)和FlexUnit 4(也稱為FlexUnit 4)。本文介紹FlexUnit 4。
要在以前版本的Flex Builder中使用FlexUnit,您必須下載下傳FlexUnit SWC檔案并将其包含在項目中。建立測試後,Flash Builder 4會自動包含五個SWC。以下SWC将添加到項目的Referenced Libraries下:
flexunit_0.9.swc
hamcrest-1.0.2.swc
的FlexUnit核-FLEX-4.0.0.2-sdk3.5.0.12783.swc
flexunitextended.swc
FlexUnitTestRunner_rb.swc
這些SWC包括FlexUnit 0.9,FlexUnit 4,測試運作器和其他庫的所有API。SWC作為Flex 4 SDK的一部分進行維護,是以無需下載下傳FlexUnit或手動添加它們。添加測試後,它們将自動添加。
在Flash Builder 4中建立測試套件和測試用例
在本節中,您将使用Flex Builder 4和FlexUnit 4來建立測試套件和測試用例。
建立一個測試套件類
為了說明如何在Flash Builder中使用FlexUnit,我将使用一個計算數字的簡單應用程式。請按照以下步驟建立應用程式并添加測試套件:
選擇“檔案”>“建立”>“Flex項目”以建立項目。
對于“項目名稱”,鍵入CalculatorApplication。
單擊完成。
要建立測試套件,請選擇File> New> Test Suite Class(參見圖2)。
檔案
圖2.在Flash Builder 4中建立新的Test Suite類
在“建立測試套件類”對話框中,将類命名為CalculatorTestSuite。
選擇New FlexUnit 4 Test(參見圖3)。
單擊完成。
檔案
圖3.建立名為CalculatorTestSuite的新Test Suite類
測試套件是測試的組合。它運作一組測試用例。在開發期間,您可以建立一個打包到測試套件中的測試集合,一旦完成,您可以運作測試套件以確定您的代碼在更改後仍能正常工作。
Flash Builder 4在flexUnitTests檔案夾下添加了以下類:
package flexUnitTests
{
[Suite]
[RunWith(“org.flexunit.runners.Suite”)]
public class CalculatorTestSuite
{
}
}
該Suite中繼資料标簽訓示類是一套。該RunWith标簽訓示的測試運作器來執行它後面使用一個特定的類中的測試。FlexUnit 4是一組跑步者,可以運作一整套測試。您可以定義每個運作器以實作特定接口。例如,您可以指定一個不同的類來運作測試,而不是FlexUnit 4中内置的預設運作器。
添加測試用例類
建立Test Case類:
選擇檔案>建立>測試用例類。
選擇New FlexUnit 4 Test。
鍵入flexUnitTests作為包。
鍵入CalculatorLogicTester作為名稱。
點選下一步。
檔案
圖4.建立一個新的Test Case類
注意:在FlexUnit 1中,您可以選擇生成setUp()和tearDown()存根。當測試用例開始(setUp)和結束(tearDown)時,會自動調用這些存根。它們可用于在測試開始之前設定資訊和事件,并清除資訊和事件以確定您沒有任何記憶體洩漏。在FlexUnit 4中,您可以定義使用中繼資料标簽,這些方法[Before]和[After],因為您将在本文後面看到。
寫一個失敗的單元測試
您已準備好開始編寫測試代碼。在FlexUnit 1中,您建立的每個方法都必須以“test”開頭,以使測試運作器能夠識别該方法。結果,方法名稱更改為testAdditionMethod。在FlexUnit 4中,方法名稱不需要以“test”開頭; 相反,它們被[test]中繼資料識别,是以可以随意重構方法名稱。這是生成的代碼:
package flexUnitTests
{
public class CalculatorLogicTester
{
[Before]
public function setUp():void
{
}
[After]
public function tearDown():void
{
}
[BeforeClass]
public static function setUpBeforeClass():void
{
}
[AfterClass]
public static function tearDownAfterClass():void
{
}
}
}
我們現在可以編寫第一種方法了。我們正在建立一個電腦,是以我們需要建立電腦幫助實用程式将用于執行所有計算的方法,我們将從add方法開始。從[Test]中繼資料開始建立測試方法,而不是放置代碼。我建立的代碼在我實作該方法之前不會通過測試,見下文:
[Test]
public function testAdditionMethod():void
{
Assert.fail(“Test method not yet implemented”);
}
最後,請記住将要測試的測試用例添加到CalculatorTestSuite測試套件中。将以下粗體添加到CalculatorTestSuite.as:
package flexUnitTests
{
[Suite]
[RunWith(“org.flexunit.runners.Suite”)]
public class CalculatorTestSuite
{
public var calculatorLogic:CalculatorLogicTester;
}
}
建立項目。要運作應用程式,請按照下列步驟操作:
單擊編譯圖示并選擇FlexUnit Tests(參見圖6)或選擇Run> Run> FlexUnit Tests。
檔案
圖6.運作FlexUnit測試
2.在Run FlexUnit Tests對話框中,選擇測試用例(參見圖7)
3.單擊“确定”。
檔案
圖7.選擇所有可用的TestCases和TestSuite
4.應用程式完成後,在浏覽器中檢視測試狀态結果。(見圖8)。
檔案
圖8.浏覽器中的FlexUnit測試結果
5.關閉浏覽器視窗。
6.在FlexUnit Results視圖中檢查測試結果(參見圖9)。
如您所見,測試失敗,因為您有以下代碼CalculatorLogicTester.as:
Assert.fail(“Test method Not yet implemented”);
檔案
圖9. FlexUnit Results視圖
更新testAdditionMethod存根以生成失敗結果:
var result:Number = CalculatorLogicHelper.additionMethod(5,5);
Assert.assertEquals(result,10);
我們在實際代碼之前編寫測試。在我們的例子中,我們發現我們有一個靜态方法,它将計算添加兩個數字,而不是我們應該能夠斷言以確定執行加法計算。儲存文檔後,您會收到編譯時錯誤。請參見圖11.這是一件好事,因為編譯器會為您提供下一步需要執行的操作的說明,即建立幫助程式類和方法。
檔案
圖10.顯示失敗方法的FlexUnit Results視圖
引擎蓋下發生了什麼?
在應用程式檔案夾結構下,您可以找到檔案CalculatorLogicTester.as,CalculatorTestSuite.as和FlexUnitCompilerApplication.mxml(參見圖11)。
檔案
圖11. CalculatorApplication檔案夾結構
看一下FlexUnitApplication.mxml: