標籤:soft microsoft tcl pcl targe replace empty 可靠性 函數
所謂的單元測試(Unit Test),就是對軟體的一些模組進行測試以檢查其正確性和可靠性,這些模組可以是一個類或者是一個方法等。在Visual studio中,這十分容易實現。
開啟Visual studio,檔案->建立->項目,在此示範的是為通用Windows平台建立單元測試,因此展開Visual C#->Windows->通用->單元測試應用(通用Windows)。,
這裡單元測試的項目名為UnitTest4Demo
建立完成後,為了使條理清晰,我們在解決方案中建立一個類庫(ClassLibrary),將要測試的方法放在類庫中,而UnitTest4Demo調用放在類庫中的待測試方法。
右擊解決方案->添加->建立項目->類庫(通用Windows),
類庫取名為ClassLibrary4Test
建立完成後,解決方案管理器裡應類似
剛剛已經說了,類庫裡面放待測試方法,UnitTest4Demo負責調用並測試類別庫中的方法,因此UnitTest4Demo應引用ClassLibrary4Test。右擊UnitTest4Demo下的引用->添加引用->勾選ClassLibrary4Test,
確定後,UnitTest4Demo下的引用應類似,注意:紅線的部分就是剛剛添加的對類庫的引用
現在,在類庫ClassLirary4Test中的Class1.cs中寫個方法,簡單起見,就讓這個方法返回個0
1 public class Class12 {3 public static int ReturnZero()4 {5 return 0;6 }7 }
接著,在UnitTest4Demo中UnitTest.cs中的TestMethod1方法中調用此函數,
在這個UnitTest1類中,第一點,我們注意到UnitTest1被添加了TestClass屬性類,方法TestMethod1被添加了TestMethod屬性類,這就是用來單元測試的類和函數與一般的類和函數不同之處,這就告訴了Visual Studio我這個函數是用來測試的,Visual Studio就會將這個帶有TestClass屬性的類下的,帶有TestMethod屬性的方法放到測試資源管理員中(測試資源管理員展開方法:功能表列->測試->視窗->測試資源管理員)
第二點就是這個函數裡面就寫了一句話,Assert是用於單元測試“斷言”的類,即我輸入一些參數(當然此樣本沒有輸入參數),如果方法運行正確我“斷言”應得到的結果,如果不符,Visula studio在測試後會給出相關的資訊,這就達到了測試的效果。當然這個類有很多的重載,參見MSDN:Assert類
我們會注意到,此時測試資源管理員空空如也,並沒有TestMehod1方法,這是我們沒有產生解決方案的原因,現在產生解決方案:功能表列->產生->產生解決方案
產生之後,測試資源管理員中會出現TestMehod1方法,
下面執行測試,右擊測試單元管理器中的TestMethod1->運行選定的測試
稍等片刻,將會出現通過測試。
至此,一個簡單的單元測試完成了。
你可以在單元測試中測試更多,更複雜的方法,下面就展示一個稍微複雜一些的用於測試跨平台 app的網路通訊的樣本。
在ClassLibrary4Test類庫中建立一個HttpHelper類,類中寫個用於Get請求的方法。
1 public class HttpHelper 2 { 3 /// <summary> 4 /// Send Get request and retrieve the response as a string 5 /// </summary> 6 /// <param name="url">url</param> 7 /// <returns>response</returns> 8 public static async Task<string> SendGetRequest(string url) 9 {10 HttpClient httpClient = new HttpClient();11 Uri uri = new Uri(url);12 HttpResponseMessage response = new HttpResponseMessage();13 string httpResonseBody = string.Empty;14 try15 {16 response = await httpClient.GetAsync(uri);17 response.EnsureSuccessStatusCode();18 httpResonseBody = await response.Content.ReadAsStringAsync();19 }20 catch21 { }22 return httpResonseBody;23 }24 }
在UnitTest4Demo的UnitTest.cs中新寫個方法TestMothod_Http,調用剛寫的SendGetRequest方法。
1 [TestMethod]2 public async Task TestMethod_Http()3 {4 string url = "http://mywebapidemo.azurewebsites.net/api/Default";5 string response = await HttpHelper.SendGetRequest(url);6 Assert.AreEqual("Hello,World!", response.Replace("\"", ""));7 8 }
產生解決方案,和剛剛一樣,測試資源管理員中在產生後悔出現TestMethod_Http,測試之,可以順利通過測試。
在Visual Studio2015中使用單元測試