持續整合 - 測試
持續整合的關鍵特性之一是確保持續測試包含CI伺服器構建的所有程式碼。CI伺服器執行構建後,必須確保已到位測試用例以對所需程式碼進行測試。每個CI伺服器都能夠在CI套件中執行單元測試用例。在.Net中,單元測試是.Net框架中內建的功能,並且可以將其整合到CI伺服器中。
本章將介紹如何在.Net中定義測試用例,然後在構建完成後讓我們的TeamCity伺服器執行此測試用例。為此,我們首先需要確保為我們的示例專案定義了一個單元測試。
為此,我們必須以最大的謹慎遵循以下步驟。
步驟1 - 讓我們向我們的解決方案新增一個新類,這將在我們的單元測試中使用。此類將具有一個名稱變數,該變數將儲存字串“持續整合”。此字串將在網頁上顯示。右鍵單擊“簡單專案”並選擇選單選項新增→類。
步驟2 - 為類命名為Tutorial.cs,然後單擊螢幕底部的“新增”按鈕。
步驟3 - 開啟Tutorial.cs檔案並在其中新增以下程式碼。此程式碼僅建立一個名為Name的字串,並在建構函式中將名稱分配給字串值Continuous Integration。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Simple {
public class Tutorial {
public String Name;
public Tutorial() {
Name = "Continuous Integration";
}
}
}
步驟4 - 讓我們對Demo.aspx.cs檔案進行更改以使用此新類。使用以下程式碼更新此檔案中的程式碼。因此,此程式碼現在將建立上面建立的類的新的例項。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Simple {
public partial class Demo : System.Web.UI.Page {
Tutorial tp = new Tutorial();
protected void Page_Load(object sender, EventArgs e) {
tp.Name = "Continuous Integration";
}
}
}
步驟5 - 在我們的demo.aspx檔案中,讓我們現在引用在aspx.cs檔案中建立的tp.Name變數。
<%@ Page Language = "C#" AutoEventWireup = "true"
CodeBehind = "Demo.aspx.cs" Inherits = "Simple.Demo" %>
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
<title>TutorialsPoint1</title>
</head>
<body>
<form id = "form1" runat = "server">
<div>
<% = tp.Name%>)
</div>
</form>
</body>
</html>
為了確保我們的程式碼在進行這些更改後能夠正常工作,您可以在Visual Studio中執行程式碼。編譯完成後,您應該會獲得以下輸出。
步驟6 - 現在是時候向專案新增我們的單元測試了。右鍵單擊解決方案並選擇選單選項新增→新專案。
步驟7 - 導航到測試,並在右側選擇單元測試專案。命名為DemoTest,然後單擊“確定”。
步驟8 - 在您的Demo Test專案中,您需要新增對簡單專案的引用以及必要的測試程式集。右鍵單擊該專案並選擇選單選項新增引用。
步驟9 - 在出現的下一個螢幕中,轉到“專案”,選擇Simple Reference,然後單擊“確定”。
步驟10 - 再次單擊新增引用,轉到“程式集”並在搜尋框中鍵入Web。然後新增System.Web的引用。
步驟11 - 在單元測試檔案中,新增以下程式碼。此程式碼將確保Tutorial類具有一個字串名稱變數。它還將斷言Name應該等於“持續整合”的值。這將是我們的簡單測試用例。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Simple;
namespace DemoTest {
[TestClass]
public class UnitTest1 {
[TestMethod]
public void TestMethod1() {
Tutorial tp = new Tutorial();
Assert.AreEqual(tp.Name, "Continuous Integration");
}
}
}
步驟12 - 現在讓我們在Visual Studio中執行我們的測試以確保它有效。在Visual Studio中,選擇選單選項測試→執行→所有測試。
執行測試後,您將在Visual Studio的左側看到測試成功執行。
在TeamCity中啟用持續測試 - 現在所有測試用例都已到位,是時候將它們整合到我們的Team City伺服器中了。
步驟13 - 為此,我們需要在專案配置中建立一個構建步驟。轉到您的專案主頁並單擊“編輯配置設定”。
步驟14 - 然後轉到“構建步驟→MS Build”並單擊“新增構建步驟”,如下面的螢幕截圖所示。
在出現的下一個螢幕中,新增以下值 -
選擇執行程式型別為Visual Studio Tests。
輸入可選的測試步驟名稱。
選擇測試引擎型別為VSTest。
選擇測試引擎版本為VSTest2013。
在測試檔名稱中,提供位置為DemoTest\bin\Debug\DemoTest.dll - 請記住,DemoTest是我們包含單元測試的專案的名稱。DemoTest.dll將由我們的第一個構建步驟生成。
單擊“儲存”,它將位於螢幕末尾。
現在您將為專案有兩個構建步驟。第一個是構建步驟,它將構建您的應用程式程式碼和您的測試專案。下一個將用於執行您的測試用例。
步驟15 - 現在是時候將所有程式碼簽入Git了,以便可以觸發整個構建過程。唯一的區別是這次您需要從Demo父資料夾執行git add和git commit命令,如下面的螢幕截圖所示。
現在,當觸發構建時,您將看到一個初始輸出,該輸出將說明測試已透過。
步驟16 - 如果單擊“測試透過”結果並轉到“測試”選項卡,您現在將看到UnitTest1已執行並且已透過。