共用方式為


逐步解說:建立和執行資料庫單元測試

更新:2007 年 11 月

在這個逐步解說中,您會建立「資料庫單元測試」(Database Unit Test) 來測試簡單的 Transact-SQL (T-SQL) 指令碼。在建立任何資料庫單元測試前,針對要測試的資料庫,您必須具有或建立「資料庫專案」(Database Project)。此外,資料庫必須包含資料,這樣測試才可以傳回有意義的結果。

在本逐步解說的第一個程序中,您會建立資料庫專案並匯入 Northwind 資料庫的「結構描述」(Schema)。建立專案後,您會建立「資料產生計劃」(Data Generation Plan) 以產生 Orders 資料表資料行的資料。接著,您會建立包含測試的專案、自己撰寫測試,然後執行測試以驗證指令碼是否如預期般運作。

必要條件

若要完成這個逐步解說,必須能夠連接到安裝有 Northwind 資料庫的資料庫伺服器。

若要建立資料庫專案

  1. 在 [檔案] 功能表中,指向 [新增],然後按一下 [專案]。

    [新增專案] 對話方塊隨即出現。

  2. 展開 [專案類型] 中的 [資料庫專案] 節點,然後按一下 [Microsoft SQL Server]。

  3. 按一下 [範本] 清單中的 [SQL Server 2000 精靈]。

  4. 在 [名稱] 中輸入 TestNorthwind。

  5. 選擇 [方案] 清單中的 [建立新方案] (若尚未反白顯示)。

  6. 選取 [為方案建立目錄] 核取方塊 (若尚未選取)。

  7. 清除 [加入至原始檔控制] 核取方塊 (若尚未清除),然後按一下 [確定]。

    新增資料庫專案精靈隨即出現。接下來將使用精靈設定資料庫專案並匯入初始資料庫結構描述。

若要設定專案並匯入資料庫結構描述

  1. 閱讀完 [歡迎] 頁面之後,按 [下一步]。

  2. 由於 Northwind 資料庫只包含一個結構描述,請按一下 [依物件類型組織我的專案]。

    重要事項:

    專案的組織方式一旦建立就無法變更。

  3. 在 [為資料庫專案中建立的物件,指定要使用的預設結構描述] 中,接受預設的 dbo。

  4. 在 [設定資料庫選項] 頁面上接受預設選項,然後按 [下一步]。

    注意事項:

    您可以在建立專案之後變更這些選項。如需詳細資訊,請參閱 HOW TO:設定資料庫專案進行建置和部署

  5. 選取 [匯入資料庫結構描述] 頁面上的 [匯入現有結構描述] 核取方塊。

  6. 在 [來源資料庫連接] 中,按一下對應到伺服器的連接以及包含 Northwind 資料庫的資料庫。如果連接尚未存在,請按一下 [新增連接] 建立連接。如果沒有指定連接,將會建立資料庫專案,但不會匯入任何結構描述。

    注意事項:

    如果資料庫專案尚未包含資料庫物件,可以稍後再匯入資料庫結構描述。如需詳細資訊,請參閱 HOW TO:匯入資料庫結構描述

  7. 接受預設匯入選項,然後按 [下一步]。

  8. 在 [設定建置/部署] 頁面上,按一下 [目標連接] 中的 [瀏覽] 按鈕,然後指定連接,以連接到要建立隔離開發環境的資料庫伺服器。

    若要建立資料庫的新本機執行個體,在 [連接屬性] 對話方塊的 [伺服器名稱] 底下輸入 (local),然後按一下 [使用 Windows 驗證]。按一下 [確定]。

  9. 在 [目標資料庫名稱] 中,輸入 TestNorthwind (若尚未指定)。

  10. 按一下 [部署定序預設值] 中的 [使用伺服器的定序]。

    這個步驟會設定目標資料庫使用資料庫專案定序。

  11. 清除 [如果可能發生資料遺失,則封鎖累加部署] 核取方塊。

    由於隔離開發環境只會包含產生的測試資料,因此可以允許發生資料遺失。

  12. 按一下 [完成] 建立資料庫專案並匯入資料庫。

若要檢查產生的專案

  1. 在 [方案總管] 中,展開 TestNorthwind 節點,然後展開 [結構描述物件] 子節點。

  2. 瀏覽 [結構描述物件] 節點底下的子節點階層架構。

    [方案總管] 包含定義物件的檔案,該物件位於匯入物件之來源資料庫的結構描述中。

  3. 按一下 [檢視] 功能表上的 [其他視窗],然後指向 [結構描述檢視]。

  4. 展開 [結構描述檢視] 中的 TestNorthwind 節點。

  5. 瀏覽 TestNorthwind 節點底下的子節點階層架構。

    [結構描述檢視] 包含物件,這些物件是在 [方案總管] 出現的檔案中定義的。

  6. 按一下 [方案總管] 中的 TestNorthwind 節點。

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

  8. 按一下 [屬性] 頁面上的 [建置] 索引標籤。

  9. 在 [目標資料庫名稱] 中輸入 TestNorthwind。

  10. 按一下 [檔案] 功能表上的 [儲存選取項目]。

  11. 按一下 [方案總管] 中的 TestNorthwind 專案。

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

  13. 在 [建置] 功能表中,按一下 [部署 TestNorthwind]。

    注意事項:

    每位開發人員都會指定連接字串,以連接到要裝載資料庫複本的資料庫伺服器。

接下來將指定資料產生計劃,以實際的測試資料填入隔離開發資料庫。

若要建立資料產生計劃

  1. 展開 [方案總管] 中的 TestNorthwind 節點,然後按一下 [資料產生計劃] 資料夾。

  2. 在 [專案] 功能表上,按一下 [加入新項目]。

    [加入新項目] 對話方塊隨即出現。

  3. 按一下 [範本] 清單中的 [資料產生計劃]。

  4. 在 [名稱] 中輸入 TestNW.dgen,然後按一下 [加入]。

    名為 TestNW 的資料產生計劃便會加入資料庫專案,並在編輯器中開啟。資料庫結構描述會匯入資料產生計劃。接下來將修改該計劃,以產生更多實際測試資料。

若要定義訂單資料表的資料產生計劃

  1. 按一下資料產生計劃中的 dbo.Orders。

  2. 指向 [資料] 功能表上的 [資料產生器],然後按一下 [資料行詳細資料]。

    [資料行詳細資料] 視窗隨即出現,並顯示「訂單」資料表的資料行、其資料型別、與每個資料行相關聯的預設產生器,以及產生器結果。

  3. 在 [資料行詳細資料] 窗格中,按一下 [ShipCity],然後將 [產生器] 欄位設為 [資料繫結產生器]。

    這個步驟表示您要使用查詢結果填入這個資料行。

  4. 在 [檢視] 功能表中,按一下 [屬性視窗]。

  5. 在 [屬性] 視窗中,移至 [產生器] 區段。在 Connection Information 屬性中,按一下與前面步驟匯入資料庫結構描述之來源資料庫對應的連接。

    這個步驟會指定要用來執行查詢的資料庫連接,讓查詢產生這個資料行的資料。

  6. 在 [屬性] 視窗的 [產生器] 區段中,將 Query 屬性的查詢字串設為 SELECT * FROM Orders。

    注意事項:

    請不要變更初始值。這個值會用來從 Northwind 資料庫產生特定的資料,以供這個逐步解說稍後使用。

  7. 在 [資料行詳細資料] 窗格中,找到 ShipCity 的 [產生器輸出] 欄位,然後按一下 [OutputTable1].[ShipCity]。

    這個步驟會選取結果集中要與這個資料行建立關聯的資料行。

  8. 儲存資料產生計劃。

    下一個步驟是建立資料庫單元測試來使用這些資料。

建立資料庫單元測試

若要建立資料庫單元測試

  1. 在 Visual Studio 中,開啟 [測試] 功能表,然後按一下 [新增測試]。

    [加入新測試] 對話方塊隨即出現。

  2. 按一下 [資料庫單元測試]。

  3. 在 [測試名稱] 中輸入 SampleUnitTest。

  4. 按一下 [加入至測試專案] 底下的 [建立新 Visual C# 測試專案],然後按一下 [確定]。

    [新增測試專案] 對話方塊隨即出現。

  5. 保留新測試專案的預設名稱,然後按一下 [建立]。

    新的測試專案便會加入至現有的 TestNorthwind 方案。專案會包含名為 SampleUnitTest.cs 的檔案,其中包含新測試類別的程式碼,以用於資料庫單元測試。測試類別稱為 SampleUnitTest,其中預設會有名為 DatabaseTest1 的新單元測試方法。您可以保留這個測試方法的名稱,或變更為更有意義的名稱,然後便可自訂方法來傳回目標測試結果。如需詳細資訊,請參閱 HOW TO:開啟要編輯的資料庫單元測試

    [專案 'TestProject' 組態] 對話方塊隨即出現。

  6. 在 [資料庫連接] 底下,選取第一個下拉式清單中的 TestNorthwind 資料庫。資料庫的名稱格式為 <Server>TestNorthwind.dbo。如果看到這個名稱,請按一下該名稱,然後跳至步驟 9。

  7. 如果 TestNorthwind 資料庫沒有出現,請按一下 [新增連接]。

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

  8. 在 [連接屬性] 對話方塊中,找出擁有 TestNorthwind 資料庫的伺服器,然後按一下要使用的驗證類型。在 [選取或輸入資料庫名稱] 底下輸入 TestNorthwind,然後按一下 [確定] 關閉 [連接屬性] 對話方塊。

    注意事項:

    在建立資料庫的連接之後,連接名稱會出現在 [專案 'TestProject' 組態] 對話方塊的 [資料庫連接] 底下。

  9. 在 [專案 'TestProject' 組態] 對話方塊中,選取 [使用次要連接驗證單元測試] 核取方塊。

    注意事項:

    您剛才已將相同值指定給兩個連接字串。在大多數情況下,驗證的連接字串所擁有的權限要比執行的連接字串高。如需詳細資訊,請參閱連接字串與權限概觀

  10. 選取 [執行單元測試前先產生測試資料] 核取方塊。

  11. 在下拉式清單中,按一下 TestNW 資料產生計劃,然後按一下 [確定]。當您執行單元測試時,這個資料產生計劃將會套用至 TestNorthwind 資料庫。

    注意事項:

    您也可以使用這個對話方塊設定結構描述部署。如需詳細資訊,請參閱 HOW TO:設定資料庫單元測試執行

    當 [專案 'TestProject' 組態] 對話方塊關閉時,您可以看到 [資料庫單元測試設計工具]。

    每當新增測試條件時,即會在原始程式碼檔案中建立 C# 或 Visual Basic 程式碼。

  12. 在 [方案總管] 中,以滑鼠右鍵按一下測試專案,然後按一下 [建置] 建置專案。

  13. 按一下資料庫單元測試設計工具巡覽列中的 [加入測試] (+),加入其他單元測試。

    [指定資料庫測試的名稱] 對話方塊隨即出現。

  14. 保留測試方法的預設名稱,然後按一下 [確定]。這會將另一個單元測試加入至現有專案。這個單元測試會以新測試方法的形式,建立在稍早所建立的 SampleUnitTest 類別內。

    您現在可以準備撰寫實際的測試邏輯。

若要撰寫資料庫單元測試

  1. 在資料庫單元測試設計工具的巡覽列中,按一下 DatabaseTest1 並確定旁邊的下拉式清單中選取了 [測試]。這可讓您針對 DatabaseTest1 單元測試中的測試動作建立測試指令碼。

  2. 將下列 T-SQL 陳述式加入 T-SQL 編輯器中:

    SELECT * from Orders where ShipCity = 'Seattle'
    
  3. 在 [測試條件] 窗格中,按一下類型為 Inconclusive 的測試條件,然後按一下 [刪除測試條件] (x) 刪除該測試條件。

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

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

  6. 從 [檔案] 功能表中,按一下 [全部儲存]。

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

若要執行資料庫單元測試

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

    [測試檢視] 視窗會列出兩項測試。在本逐步解說稍早部分中,您建立名為 DatabaseTest1 的測試,並在其中加入 T-SQL 陳述式和測試條件。而名為 DatabaseTest2 的測試是空白的。

  2. 以滑鼠右鍵按一下 [DatabaseTest1],然後按一下 [執行選取範圍]。

    Visual Studio Team System Database 版會使用您所指定的權限內容連接到資料庫,並套用資料產生計劃。Database 版接著會在測試中執行 T-SQL 指令碼前切換為執行內容。接下來,Database 版會根據測試條件中指定的內容評估 T-SQL 指令碼的結果,並將成功或失敗結果顯示在 [測試結果] 視窗中。

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

    測試成功,表示執行 SELECT 陳述式會傳回一個資料列。

    注意事項:

    如果您在資料產生計劃中變更 [Orders][ShipCity] 的初始值,或變更要產生的資料列數,那麼這項測試可能會失敗。如果使用初始值 5 來從 Northwind 產生 50 列資料,則其中一個結果會包含 Seattle 做為 ShipCity 欄位的值。

後續步驟

在典型的專案中,您會定義其他的單元測試,以驗證是否所有重要的資料庫物件都有正確運作。在完成這些測試集後,會將它們簽入「版本控制」(Version Control),與小組成員共用。

在建立基準後,您可以建立並修改資料庫物件,然後再建立關聯的測試,以驗證變更是否會破壞現有的行為。

請參閱

工作

HOW TO:建立空白資料庫單元測試

HOW TO:設定資料庫單元測試執行

概念

Database Edition 的用語概觀

其他資源

設計資料庫單元測試

在 Visual Basic 或 Visual C# 中自訂資料庫單元測試