日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【学习笔记】C#中的单元测试

發布時間:2025/4/14 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】C#中的单元测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  

  周一老師講完單元測試以后,感覺挺好玩,通過查資料和相關書籍學到了幾種C#在VS2010的測試方法,跟大家分享下,圖文并茂啊,有木有~~

?

 1.從被測試的代碼中生成單元測試

  1.1創建C#控制臺程序,命名為AddUnitText

    

  1.2然后先用一小段很簡單的代碼練習一下

1 class Program 2 { 3 public int Add(int a, int b) 4 { 5 return a + b; 6 } 7 static void Main(string[] args) 8 { 9 } 10 }

1.3然后用下面的步驟創建單元測試

? (1)在Add方法體中,在右擊菜單中選擇創建單元測試,并為這個方法創建單元測試代碼的基本框架

(2)點擊確定后,系統自動生成單元測試代碼,如下所示

1 namespace AddText 2 { 3 /// <summary> 4 ///這是 ProgramTest 的測試類,旨在 5 ///包含所有 ProgramTest 單元測試 6 ///</summary> 7 [TestClass()] 8 public class ProgramTest 9 { 10 11 12 private TestContext testContextInstance; 13 14 /// <summary> 15 ///獲取或設置測試上下文,上下文提供 16 ///有關當前測試運行及其功能的信息。 17 ///</summary> 18 public TestContext TestContext 19 { 20 get 21 { 22 return testContextInstance; 23 } 24 set 25 { 26 testContextInstance = value; 27 } 28 } 29 30 #region 附加測試特性 31 // 32 //編寫測試時,還可使用以下特性: 33 // 34 //使用 ClassInitialize 在運行類中的第一個測試前先運行代碼 35 //[ClassInitialize()] 36 //public static void MyClassInitialize(TestContext testContext) 37 //{ 38 //} 39 // 40 //使用 ClassCleanup 在運行完類中的所有測試后再運行代碼 41 //[ClassCleanup()] 42 //public static void MyClassCleanup() 43 //{ 44 //} 45 // 46 //使用 TestInitialize 在運行每個測試前先運行代碼 47 //[TestInitialize()] 48 //public void MyTestInitialize() 49 //{ 50 //} 51 // 52 //使用 TestCleanup 在運行完每個測試后運行代碼 53 //[TestCleanup()] 54 //public void MyTestCleanup() 55 //{ 56 //} 57 // 58 #endregion 59 60 61 /// <summary> 62 ///Add 的測試 63 ///</summary> 64 [TestMethod()] 65 public void AddTest() 66 { 67 Program target = new Program(); // TODO: 初始化為適當的值 68 int a = 0; // TODO: 初始化為適當的值 69 int b = 0; // TODO: 初始化為適當的值 70 int expected = 0; // TODO: 初始化為適當的值 71 int actual; 72 actual = target.Add(a, b); 73 Assert.AreEqual(expected, actual); 74 Assert.Inconclusive("驗證此測試方法的正確性。"); 75 } 76 } 77 }

(3)ProgramTest.cs代碼文件詳講

[TestMethod()]:說明了以下代碼是一個測試用例

Int a = o; // TODO: 初始化為適當的值

int b = 0; // TODO: 初始化為適當的值

這兩句是被測函數的輸入參數,需要我們去修改它的值,也就是我們輸入測試用例的地方。

double expected = 0; // TODO: 初始化為適當的值

double actual;

這兩句話淺顯易懂,前一句話是定義了期望值和對它進行初始化,后一句話是定義了實際值。默認

Assert.AreEqual(expected, actual);

Assert在這里可以理解成斷言:在VSTS里做單元測試是基于斷言的測試。

默認代碼中Assert.Inconclusive 表明這是一個未經驗證的單元測試。在實際的程序中可以注釋掉。

(4)還可以在C#項目中自行創建單元測試項目,然后編寫測試方法

單元測試的基本方法是調用被測代碼的函數,輸入函數的參數值,獲取返回結果,然后與預期測試結果進行比較,如果相等則認為測試通過,否則認為測試不通過。

1、Assert類的使用

Assert.Inconclusive()??? 表示一個未驗證的測試;

Assert.AreEqual()???????? 測試指定的值是否相等,如果相等,則測試通過;

AreSame()??????????? 用于驗證指定的兩個對象變量是指向相同的對象,否則認為是錯誤

AreNotSame()??????? 用于驗證指定的兩個對象變量是指向不同的對象,否則認為是錯誤

Assert.IsTrue()????????????? 測試指定的條件是否為True,如果為True,則測試通過;

Assert.IsFalse()???????????? 測試指定的條件是否為False,如果為False,則測試通過;

Assert.IsNull()?????????????? 測試指定的對象是否為空引用,如果為空,則測試通過;

Assert.IsNotNull()????????? 測試指定的對象是否為非空,如果不為空,則測試通過;

2、CollectionAssert類的使用

用于驗證對象集合是否滿足條件

StringAssert類的使用

用于比較字符串。

StringAssert.Contains

StringAssert.Matches

StringAssert.tartWith

3、附加測試屬性的使用

默認都是被注釋掉的,只要我們取消注釋就可以使用了。這個功能的加入,很大程度上是為了增加測試的靈活性。具體的屬性有:

[ClassInitialize()]在運行類的第一個測試前先運行代碼

[ClassCleanup()]在運行完類中的所有測試后再運行代碼

[TestInitialize()]在運行每個測試前先運行代碼

[TestCleanup()]在運行完每個測試后運行代碼

4、測試單元NUnit 聲明

? 1.AreEqual

???? Assert.AreEqual(expected,actual[,string message])

??? //判斷結果與預期是否相等

???? 報告的結果如下:

???? Assert.AreEqia;(expected,actual,tolerance[,string message])

?? 2.IsNull

????Assert.IsNull(object [, string message])
??? Assert.IsNotNull(object [, string message])

??? 聲明給的對象是否屬于空

?? 3.AreSame

??? Assert.AreSame(expected, actual [, string message])

???? 聲明是否同類型

?? 4.IsTrue

??? Assert.IsTrue(bool condition [, string message])

??? 判斷返回條件是否為真

???5.Fail

??? Assert.Fail([string message])

???? 測試立即失敗。

?

2.下面是老師課上編寫的程序

2.1這是測試代碼:

?  查找list[]中的最大值:int Largest(int list[], int length);

  首份實現代碼如下:

int Largest(int list[], int length)

{

  int i,max;

   for(i = 0; i < (length – 1); i ++ )

  {  

     if(list[i] > max)

       { max=list[i]; }

  }

return max;

}

?

2.2編寫程序:

1 static void Main(string[] args) 2 { 3 int[] List = new int[3];//申明一個長度為3的數組保存錄入的3個數 4 int Max = 0;//保存最大值 5 for (int i = 0; i < List.Length; i++)//循環數組 6 { 7 Console.WriteLine("請輸入第" + (i + 1) + "個數:"); 8 List[i] = int.Parse(Console.ReadLine());//循環將錄入的數字保存到數組 9 if (List[i] > Max)//判斷當前數字是否大于最大值 10 { 11 Max = List[i];//將最大值賦值給Max 12 } 13 } 14 Console.WriteLine("最大的數是:{0}",Max);//輸出最大值 15 Console.ReadLine(); 16 }

2.3在此測試的過程中發現無法對程序進行有效的測試,所以重新寫了方法

1 namespace MUnitText 2 { 3 public class LIU 4 { 5 /// <summary> 6 /// 把返回的最大值放在list中 7 /// </summary> 8 /// <param name="list">一列整數</param> 9 /// <returns>最大值返回給出的list中</returns> 10 public static int Largest(int[] list) 11 { 12 int i, max = Int32.MaxValue; 13 for (i = 0; i < list.Length - 1; i++) 14 { 15 if (list[i] > max) 16 { 17 max = list[i]; 18 } 19 } 20 return max; 21 } 22 } 23 }

?

2.4創建單元測試

測試了多組數據以后,驗證了老師上課提到的那些錯誤。

給一列數字[7,8,9].這個方法返回9.這是很符合常理的一個測試用例。但是,另外的測試用例如何想?

要寫多少測試用例?

下面給出測試思想。

[7,8,9]—>9

? [8,9,7]—>9

? [9,7,8]—>9

? 當有重復的最大的數字時候將會發生什么?

? [7,9,8,9]—>9

? 因為只存在int類型,沒有objects類型,所以你可能不會關系9返回的是什么類型。

? 那么當只有1個數字的時候,它將會是什么?

? [1]—>1

? 并且當出現負數時候又會發生什么情況:

? [-9,-8,-7]—>-7

? 可以很很簡單的看出來-7比-9大。

?

2.5編寫測試方法

首先:通過Globally assembly cath調用using NUnit.Framework;

??? NUnit框架提供我們需要的單元測試的功能。

??? 下一步,我們要定義一個類:每一個類包含著測試用例狀態屬性的注釋。必須被聲明為共有的,它必須有一個共有的,沒有參數和構造器的。

??? 最終,這個測試類包含單個帶有測試屬性的測試方法。

1 using NUnit.Framework; 2 3 [TestFixture] 4 5 public class TestSimple{ 6 7 [Test] 8 9 public void LargestOf3(){ 10 11 Assert.AreEqual(9,Cmp.Largest(new int[]{8,9,7})); 12 13 Assert.AreEqual(100,Cmp.Largest(new int[]{100,4,25})); 14 15 Assert.AreEqual(64,Cmp.Largest(new int[]{1,64,38})); 16 17 } 18 19 }

?

測試了一上午,太不容易了,抓緊搞電梯了。。

轉載于:https://www.cnblogs.com/huiyuan/p/ceshi.html

總結

以上是生活随笔為你收集整理的【学习笔记】C#中的单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲va中文字幕 | 日本视频在线 | 男人av网| av久色 | 最新毛片网| 人妻丰满熟妇av无码区不卡 | 国产色综合天天综合网 | 国产又粗又猛又黄视频 | 欧美日韩一区二区三区视频 | 欧美日韩在线第一页 | 国产成人自拍网 | 两性视频久久 | 97欧美视频 | 91成人福利| 男人的天堂毛片 | 亚洲精品一区二区三区不卡 | 人妻少妇偷人精品久久久任期 | 丰满白嫩尤物一区二区 | 亚洲一级在线观看 | 国产 xxxx | 麻豆爱爱视频 | 少妇一区二区三区 | 美景之屋电影免费高清完整韩剧 | 夜夜夜网| 亚洲成人资源 | 日本人体视频 | 亚洲永久无码精品一区二区 | 中文字幕av网址 | 色网站观看 | 成熟人妻av无码专区 | 亚洲av毛片成人精品 | 久久免费视频3 | 久久99国产精品 | 狠狠干2021| 成人在线观看一区二区 | 印度毛茸茸 | 欧美亚洲韩国 | 91精品福利| 午夜免费福利 | 成人少妇影院yyyy | 青青草华人在线 | 97香蕉视频 | av影库| h片在线观看 | 黄色小视频在线 | 米奇影视第四色 | 亚洲美女啪啪 | 免费看欧美成人a片无码 | 欧美区国产区 | 国产亚洲系列 | 久久久亚洲一区二区三区 | 成人久久久久 | 日韩欧美成人网 | 操一操日一日 | 亚欧成人在线 | 91综合久久 | 国产1区2区3区中文字幕 | 久久久久亚洲av无码麻豆 | 免费毛片小视频 | 免费视频网站在线观看入口 | www.亚洲精品| 17c国产精品一区二区 | 免费级毛片 | 在线h网| 黄视频在线播放 | 在线观看欧美亚洲 | 水密桃av| 操操干干| 永久免费毛片 | 日本天堂网 | 新亚洲天堂 | 新91在线| 亚洲AV乱码国产精品观看麻豆 | 久久久久久久伊人 | 毛片视频播放 | 国产视频高清 | av在线黄色 | 欧美 亚洲 另类 偷偷 自拍 | 91老师国产黑色丝袜在线 | 欧美十大老熟艳星 | 日韩激情视频在线 | 91在线观看.| 亚洲自拍偷拍第一页 | 亚洲xxxx18| 黄页视频在线免费观看 | 欧美性狂猛xxxxxbbbbb | 日韩免费观看一区二区 | 国产美女91| 美女视频久久久 | 成人免费视频观看视频 | 国产精品日韩一区 | 久久调教视频 | 草草网址 | 欧美在线播放一区二区 | 少妇的性事hd | 欧美久久久久久久久久 | 国产高清自拍av | www.777奇米影视 | 欧美性猛交xxxx |