共用方式為


逐步解說:建立隔離開發環境的基礎

更新:2007 年 11 月

在本逐步解說中,已經建立了「資料庫專案」(Database Project),而且也加入了版本控制。此資料庫專案包含與實際執行伺服器相符的結構描述定義。在開始對資料庫專案進行開發工作之前,您需要先建立品質基礎,包括設定「資料庫單元測試」(Database Unit Test)、定義「資料產生計劃」(Data Generation Plan)、產生測試資料,以及執行這些測試。執行測試時,會建置並部署資料庫到「隔離開發環境」(Isolated Development Environment)、以產生的資料填入資料庫,然後執行單元測試報告結果。

逐步解說將說明的工作包括:

  • 如何自訂隔離開發環境的建置設定

  • 如何建置並部署資料庫到隔離開發環境

  • 如何為資料庫專案包含的預存程序定義單元測試

  • 如何產生測試資料,並建置和執行單元測試

  • 如何將單元測試加入方案的版本控制,以提供給開發小組使用

必要條件

您必須先安裝好 Visual Studio Team System Database 版,而且能存取 Microsoft SQL Server 2005 的 AdventureWorks 範例資料庫。此外,您必須已完成逐步解說:建立隔離資料庫開發環境中的步驟。

若要自訂隔離開發環境的建置設定

  1. 如果 AdvWorksSandbox 方案已在 [方案總管] 中開啟,請跳至步驟 4。

  2. 在 [檔案] 功能表上,指向 [開啟],並按一下 [專案/方案]。

    [開啟專案] 對話方塊隨即出現。

  3. 按一下 AdvWorksSandbox 方案,然後按一下 [開啟] (這個方案的預設位置是在 My Documents\Visual Studio 2005\Projects\AdvWorksSandbox)。

    AdvWorksSandbox 方案即會在 [方案總管] 中開啟。

  4. 按一下 [方案總管] 中的 [AdvWorksSandbox] 節點。

  5. 按一下 [專案] 功能表上的 [AdvWorksSandbox 屬性]。

  6. 按一下 [建置] 索引標籤。

  7. 按一下 [目標連接] 旁邊的 [編輯]。

    [連接屬性] 對話方塊隨即出現。

    您可以在這裡自訂本機隔離開發環境的連接字串。建議的做法是每位資料庫開發人員都在自己的資料庫複本中作業,如此便可進行變更,而不會影響小組其他成員。當開發人員完成測試變更,並準備好提供給小組使用時,可以再透過中央版本控制系統共用變更。在逐步解說:建立隔離資料庫開發環境中,已設定了目標資料庫名稱,但尚未設定連接。

  8. 輸入或按一下隔離開發環境要使用的伺服器名稱。例如,若要使用本機執行個體,請輸入 (local)。

  9. 按一下要用來連接到資料庫伺服器的驗證類型。

    預設會指定 Windows 驗證。

  10. 按一下 [確定]。

    目標連接會顯示連接資訊。

  11. 按一下 [檔案] 功能表上的 [儲存選取項目],儲存您對資料庫專案屬性所做的變更。

若要建置並部署資料庫到隔離開發環境

  1. 在 [建置] 功能表上,按一下 [建置方案]。

    資料庫專案隨即會建置,並在 [輸出] 視窗中顯示結果。

  2. 按一下 [方案總管] 中的 [AdvWorksSandbox] 節點。

  3. 按一下 [建置] 功能表上的 [部署ProjectName]。您也可以用滑鼠右鍵按一下 [AdvWorksSandbox] 節點,然後按一下 [部署]。

    資料庫專案隨即建置、產生建置指令碼,然後再將指令碼部署到您在資料庫專案屬性中指定的隔離資料庫開發伺服器。接下來將產生隔離開發環境所需的測試資料。

定義單元測試

您通常會為所有預存程序、函式和觸發程序定義單元測試。不過在本逐步解說中,您將只定義一個單元測試做為範例。您會為 ufnLeadingZeros 函式和 dbo.uspGetManagerEmployees 預存程序定義測試。

ufnLeadingZeros 函式會取得整數並在前面補上 0,傳回該整數的 VARCHAR(8) 字串表示。若要測試這個函式,您可以傳入值並測試是否獲得預期的結果。

uspGetManagerEmployees 預存程序會接受您指定的員工識別碼,並傳回其主管的所有下屬員工 (完整階層架構)。如果初始值相同,資料產生器會產生相同的測試資料,因此您會知道將傳回多少資料列。這個測試非常簡單。在實際的專案中,您可能會想建立更詳細的測試,驗證是否傳回正確的員工。

若要建立單元測試

  1. 按一下 [檢視] 功能表上的 [結構描述檢視]。

    [結構描述檢視] 隨即出現 (如果尚未出現)。

  2. 在 [結構描述檢視] 中,以滑鼠右鍵按一下 [預存程序] 資料夾,然後按一下 [建立單元測試]。

    [建立單元測試] 對話方塊隨即出現。

  3. 展開 [目前的選取範圍] 樹狀目錄,然後選取預存程序 dbo.uspGetManagerEmployees 和函式 dbo.ufnLeadingZeros。清除其他已選取的預存程序或函式的核取方塊。

    注意事項:

    若要實際建立專案基礎,您會為資料庫中的所有函式、預存程序和觸發程序建立單元測試。為示範程序,本逐步解說將著重在一個預存程序和一個函式。

  4. 按一下 [專案] 中的 [建立新的 Visual C# 測試專案]。

  5. 在 [新專案名稱] 中輸入 AWSandboxTestProject,然後按一下 [確定]。

    單元測試隨即建立,而且會出現單元測試的 [專案組態] 對話方塊。

  6. 在 [資料庫連接] 中,按一下 AdvWorksSandbox 的連接。

  7. 在 [部署] 中,選取 [執行測試前自動部署資料庫專案] 核取方塊。

  8. 按一下 [資料庫專案] 中的 [AdvWorksSandbox.dbproj]。

  9. 在 [資料庫狀態] 中,選取 [執行單元測試前先產生測試資料] 核取方塊。

  10. 按一下 [資料庫狀態] 清單中的 [AWGenPlan.dgen]。

  11. 選取 [產生測試資料前先清除資料庫] 核取方塊 (如果尚未選取),然後按一下 [確定]。

    資料庫單元測試專案隨即建立並加入方案中。資料庫單元測試設計工具會開啟,讓您修改測試條件並撰寫測試。

    注意事項:

    如果您必須修改測試組態,請開啟 [測試] 功能表,然後按一下 [資料庫測試組態]。[專案組態] 對話方塊隨即出現,您可以在這裡變更組態。

    接下來將指定測試條件並撰寫測試。

若要定義 ufnLeadingZeros 函式的單元測試

  1. 在資料庫單元測試設計工具中,按一下測試清單中的 [dbo.ufnLeadingZeros]。

  2. 驗證第二個清單是否顯示 [測試]。

  3. 將設計工具上方窗格中的 Transact-SQL (T-SQL) 陳述式取代成以下程式碼:

    -- db unit test for dbo.ufnLeadingZeros
    DECLARE @RC VARCHAR (8),
    @Value INT
    
    SELECT @RC = NULL,
    @Value = 27
    
    SELECT @RC = [dbo].[ufnLeadingZeros]( @Value)
    
    IF @RC <> '00000027' 
    RAISERROR(N'ufnLeadingZero: expected "00000027" but got %s.', 16, 1, @RC)
    
    SELECT RC=@RC
    
  4. 在 [測試條件] 窗格中,按一下類型為 Inconclusive 的測試條件,然後按一下 [刪除測試條件] (x) 刪除該測試條件。

  5. 在 [測試條件] 窗格的清單中按一下 [資料列計數],然後按一下 [新增測試條件] (+),加入資料列計數測試條件。

  6. 在 [屬性] 視窗中,將 [資料列計數] 屬性設為 1。

    如果要強制測試失敗,請將 @Value 從 27 變更為其他值。

若要定義 uspGetManagerEmployees 預存程序的單元測試

  1. 在資料庫單元測試設計工具中,按一下測試清單中的 [dbo.uspGetManagerEmployees]。

  2. 驗證第二個清單是否顯示 [測試]。

    設計工具上方窗格中的 Transact-SQL (T-SQL) 陳述式應如下:

    -- db unit test for dbo.uspManagerEmployees
    DECLARE @RC VARCHAR (8),
    @ManagerID INT
    
    SELECT @RC = NULL,
    @ManagerID = 1
    
    EXEC @RC = [dbo].[uspGetManagerEmployees]( @ManagerID )
    
    SELECT RC=@RC
    
  3. 在 [測試條件] 窗格中,按一下類型為 Inconclusive 的測試條件,然後按一下 [刪除測試條件] (x) 刪除該測試條件。

  4. 在 [測試條件] 窗格的清單中按一下 [資料列計數],然後按一下 [新增測試條件] (+),加入資料列計數測試條件。

  5. 在 [屬性] 視窗中,將 [資料列計數] 屬性設為 11。

    注意事項:

    若要判斷預存程序的參數值和預期結果,您可以在資料產生之後使用 Transact-SQL (T-SQL) 編輯器,查看 [HumanResources].[Employee] 資料表的內容。在這個範例中,EmployeeID 為 1 的員工是在 11 人階層架構的最上方。因此,預存程序應傳回 11 個資料列。只要使用相同的初始值產生測試資料,每次執行都應得到相同的資料。

    您現在可以準備執行單元測試。

建置並執行單元測試

您現在已定義單元測試,接下來就可以建置並執行這些測試。

若要建置並執行單元測試

  1. 在 [方案總管] 中,以滑鼠右鍵按一下方案節點,然後按一下 [重建方案]。

    這個步驟會強制重建資料庫專案和單元測試專案,確保所有內容都是最新的。

  2. 指向 [測試] 功能表上的 [視窗],然後按一下 [測試檢視]。

    [測試檢視] 視窗會列出數項測試。預設會建立名為 ManualTest1 和 TestMethod1 的測試。名為 dbo_uspGetManagerEmployeesTest 和 dbo_ufpLeadingZeroTest 的測試是您在本逐步解說中建立的測試。

  3. 選取 dbo_uspGetManagerEmployeesTest 和 dbo_ufpLeadingZeroTest 的核取方塊,以滑鼠右鍵按一下其中一個,然後按一下 [執行選取範圍]。

  4. 檢視 [測試結果] 視窗中的結果。

    資料庫專案會部署至隔離開發環境,接著產生測試資料,最後測試執行並成功。

簽入暫止的變更

現在您已定義單元測試來檢查變更是否會破壞資料庫,這時就可以簽入測試並將方案提供給小組使用。

若要提供方案給小組使用

  1. 指向 [檢視] 功能表上的 [其他視窗],然後按一下 [暫止的變更]。

    [暫止的變更] 視窗隨即出現。

  2. 在 [註解] 中,輸入 Defined data generation plan and baseline unit tests。

  3. 在 [暫止的變更] 視窗中,按一下工具列上的 [簽入]。

    [簽入進度] 對話方塊隨即出現,顯示資料庫專案和所包含的檔案加入版本控制的進度。[方案總管] 中的圖示會更新,表示檔案已簽入版本控制。

後續步驟

現在您已將方案簽入版本控制,這時小組的每位成員都可以執行被指派的工作。每個人都可在自己的隔離資料庫開發環境中作業,直到變更準備好提供給他人使用。在逐步解說:在隔離環境中執行反覆資料庫開發中,您會在隔離開發環境中使用重構來重新命名資料庫物件。您會先建置、部署和測試變更,然後再簽入這些變更,以供其他小組成員同步處理。

請參閱

工作

逐步解說:在隔離環境中執行反覆資料庫開發

概念

資料庫專案設定概觀

資料庫建置與部署概觀

Database Edition 的用語概觀

其他資源

產生資料概觀

資料庫單元測試概觀