<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
單元測試就是編寫一段程式碼,用來檢查某個特定條件下,另外一段程式碼的行為是否符合我們的預期。
單元測試的程式碼與實際程式的程式碼具有同等的重要性。
每一個單元測試,都是用來定向測試它所對應的一個單元的程式碼是否正確執行(一般只的是對方法的測試)。
單元測試應該由被測試程式碼的編寫者來完成(即程式設計師自己來完成,因為只有程式設計師自己才知道程式的效果)。
能夠協助程式設計師儘快找到程式碼中bug的具體位置。
能夠讓程式設計師對自己的程式更有自信。
能夠讓程式設計師在提交專案之前就將程式碼變得更加的強壯。
能夠協助程式設計師更好的進行開發。
能夠向其他的程式設計師展示你寫的程式該如何呼叫。
能夠讓專案主管更瞭解系統當前的情況。
VSTS中的測試工具可以對任何類、介面、結構等實體中的欄位、屬性、建構函式、方法等進行單元測試。用的最多的是對方法進行測試。
單元測試分為兩種:
1、整體測試。
2、單獨測試。
通常在解決方案中新增一個測試專案,用於單元測試。將單元測試程式碼和業務程式碼分開。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UnitTestingCon { /// <summary> /// 三角形 /// </summary> public class Triangle { // 定義三角形三邊長的屬性 public float SideLength1 { get; private set; } public float SideLength2 { get; private set; } public float SideLength3 { get; private set; } /// <summary> /// 建構函式,用來給屬性賦值 /// </summary> /// <param name="sideLength1"></param> /// <param name="sideLength2"></param> /// <param name="sideLength3"></param> public Triangle(float sideLength1, float sideLength2, float sideLength3) { SideLength1 = sideLength1; SideLength2 = sideLength2; SideLength3 = SideLength3; } /// <summary> /// 判斷是否是一個三角形 /// 1、每條邊都是正數 /// 2、兩邊之和大於第三邊 /// </summary> /// <returns></returns> public bool IsTriangle() { // 三邊長度有不是正數的返回false if((SideLength1<=0)|| (SideLength2 <= 0)|| (SideLength3 <= 0)) { return false; } else { return (((SideLength1+SideLength2)>SideLength3) &&((SideLength1+SideLength3))>SideLength2 &&((SideLength2+SideLength3)>SideLength1)); } } /// <summary> /// 判斷是否為等邊三角形 /// 1、必須是三角形 /// 2、三條邊必須都相等 /// </summary> /// <returns></returns> public bool IsEquilateralTriangle() { if(!IsTriangle()) { return false; } else { return ((SideLength1==SideLength2)&&(SideLength1==SideLength3)&&(SideLength2==SideLength3)); } } /// <summary> /// 獲取三角形的面積 /// 1、如果不是三角形,面積為0 /// 2、如果s為三角形的三邊(a、b、c)和的一半 /// 三角形的面積為(s*(s-a)*(s-b)*(s-c))的平方根 /// </summary> /// <returns></returns> public double GetArea() { if(!IsTriangle()) { return 0; } else { float s = (SideLength1 + SideLength2 + SideLength3) * 0.5f; return Math.Sqrt(s * (s - SideLength1) * (s - SideLength2) * (s - SideLength3)); } } } }
在解決方案上面右鍵,選擇“新增”->新建專案:
在開啟的對話方塊中選擇測試下面的單元測試專案,專案名稱:要測試的類名+Test
建立的單元測試專案結構如下:
UnitTest1是預設生成的測試類,可以刪掉。
在單元測試專案上右鍵,選擇“新增”->“類”,然後選擇測試下面的單元測試
約定:要測試的類和測試的方法以Test結尾。
單元測試預設在Microsoft.VisualStudio.TestTools.UnitTesting名稱空間下面。
編寫測試程式碼前首先要新增對測試專案的參照,要測試哪個專案就要新增對哪個專案的參照。測試方法上面要新增特性[TestMethod],表示是一個測試方法。新增是否是三角形方法的測試程式碼,測試程式碼如下:
/// <summary> /// 測試是否是三角形這個方法 /// </summary> [TestMethod] public void IsTriangleTest() { #region 測試用例一 // 初始化屬性 float SideLength1 = 0f; float SideLength2 = 0f; float SideLength3 = 0f; // 範例化 riangle target = new Triangle(SideLength1, SideLength2, SideLength3); // 定義一個變數,儲存期待的結果 bool excepted = false; // 定義一個變數,儲存實際的結果 bool actual; actual = target.IsTriangle(); // 斷言期待的結果和實際的結果是否相等,如果相等表示測試通過,否則測試失敗 Assert.AreEqual(excepted, actual); #endregion }
在執行測試程式碼以前,需要開啟測試資源管理器視窗和程式碼覆蓋率結果視窗,在選單欄的測試裡面開啟
執行測試程式碼,可以在測試方法上面右鍵選擇執行測試:
或者選擇選單欄測試裡面的執行:
或者是在測試資源管理器裡面的測試方法上面直接右鍵:
執行測試程式碼,檢視測試結果:
表示測試通過。
注意:在測試方法裡面新增斷點,可以進行偵錯,可以按照上面的三種方式選擇偵錯測試。
檢視程式碼覆蓋率:
從上面的截圖中可以看出,程式碼覆蓋率只要25%,說明測試程式碼寫的還不夠全面。需要繼續完善單元測試的程式碼。
Assert:斷言
在Microsoft.VisualStudio.TestTools.UnitTesting名稱空間中。
Assert類是一個靜態類。
序號 | 方法 | 描述 |
---|---|---|
1 | AreEqual | 判斷兩個值是否相等,如果兩個值不相等,則測試失敗。有多個過載 |
2 | AreNotEqual | 判斷兩個值是否不相等,如果兩個值相等,則測試失敗。有多個過載 |
3 | AreSame | 判斷參照的物件是否相同。如果兩個輸入內容參照不相同的物件,則測試失敗。 |
4 | AreNotSame | 判斷參照的物件是否不相同。如果兩個輸入內容參照相同的物件,則測試失敗。 |
5 | Fail | 斷言失敗 |
6 | Inconclusive | 表示無法證明為true或false的測試結果 |
7 | IsFalse | 指定的條件是否為false。如果該條件為true,則測試失敗。 |
8 | IsTrue | 指定的條件是否為true。如果該條件為false,則測試失敗。 |
9 | IsInstanceofType | 測試指定的物件是否為所需型別的範例。如果所需的範例不在該物件的繼承層次結構中,則測試失敗。 |
10 | IsNotInstanceOfType | 測試指定的物件是否為所需型別的範例。如果所需的範例在該物件的繼承層次結構中,則測試失敗。 |
11 | IsNull | 測試指定的物件是否為空。 |
12 | IsNotNull | 測試指定的物件是否為非空。 |
用於標識類是一個測試類。
用法:在類上面標註[TestClass]
測試類的命名方式:<被測試類的類名>Test
TestMethod特性
用於標識一個測試方法。
用法:在測試方法上面標註[TestMethod]
測試方法的命名方式:<被測試方法的方法名>Test
注意:在測試方法上面一定要新增TestMethod特性,否則該方法不會被執行。
程式碼覆蓋率是單元測試寫的是否合理或是否達到要求的一個唯一的標準。
程式碼覆蓋率是測試程式碼所執行到的實際程式路徑的覆蓋率。
a、既有程式碼新增單元測試的步驟
第一步:對所有程式集中的公開類以及公開類裡面的公開方法新增單元測試。
第二步:對於建構函式和公共屬性進行單元測試。
第三步:新增全面單元測試。
b、給哪些程式碼新增單元測試
針對屬於框架技術中的程式碼新增單元測試。
為業務邏輯層對介面公開的方法新增單元測試。
c、對應剛開始的專案,應該對所有公開的方法和屬性都新增單元測試。
a、編寫單元測試程式碼時注意事項
所測試的方法的程式碼覆蓋率必須達到100%。
所測試的程式碼內部的狀態。
被測試的程式碼所使用的外部裝置的狀態。(比如印表機的狀態)
b、怎麼提高程式碼覆蓋率
邊界條件資料。
空資料。
格式不正確資料。
程式碼覆蓋率100%並不能完全保證程式碼正確。
需要對執行的結果進行斷言。
平均每5行測試程式碼要有一個斷言。
測試外部裝置狀態更改時,測試是否正常通過。
到此這篇關於Visual Studio編寫單元測試的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45