最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Visual Studio編寫單元測試

 更新時間:2022年03月08日 17:24:32   作者:.NET開發(fā)菜鳥  
本文詳細(xì)講解了使用Visual Studio編寫單元測試的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、什么是單元測試

單元測試就是編寫一段代碼,用來檢查某個特定條件下,另外一段代碼的行為是否符合我們的預(yù)期。
單元測試的代碼與實際程序的代碼具有同等的重要性。
每一個單元測試,都是用來定向測試它所對應(yīng)的一個單元的代碼是否正確執(zhí)行(一般只的是對方法的測試)。
單元測試應(yīng)該由被測試代碼的編寫者來完成(即程序員自己來完成,因為只有程序員自己才知道程序的效果)。

二、單元測試的好處

能夠協(xié)助程序員盡快找到代碼中bug的具體位置。

能夠讓程序員對自己的程序更有自信。

能夠讓程序員在提交項目之前就將代碼變得更加的強(qiáng)壯。

能夠協(xié)助程序員更好的進(jìn)行開發(fā)。

能夠向其他的程序員展示你寫的程序該如何調(diào)用。

能夠讓項目主管更了解系統(tǒng)當(dāng)前的情況。

三、編寫單元測試

VSTS中的測試工具可以對任何類、接口、結(jié)構(gòu)等實體中的字段、屬性、構(gòu)造函數(shù)、方法等進(jìn)行單元測試。用的最多的是對方法進(jìn)行測試。

單元測試分為兩種:

1、整體測試。

2、單獨測試。

通常在解決方案中添加一個測試項目,用于單元測試。將單元測試代碼和業(yè)務(wù)代碼分開。

1、新建一個空白的解決方案,命名為:UnitTestingSolution

2、新建一個控制臺應(yīng)用程序,作為業(yè)務(wù)代碼進(jìn)行測試

3、在控制臺應(yīng)用程序中新建一個Triangle類,對Triangle類里面的方法進(jìn)行測試,Triangle類定義如下:

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>
        /// 構(gòu)造函數(shù),用來給屬性賦值
        /// </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、每條邊都是正數(shù)
        /// 2、兩邊之和大于第三邊
        /// </summary>
        /// <returns></returns>
        public bool IsTriangle()
        {
            // 三邊長度有不是正數(shù)的返回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));
            }
        }
    }
}

4、新建單元測試項目

在解決方案上面右鍵,選擇“添加”->新建項目:

在打開的對話框中選擇測試下面的單元測試項目,項目名稱:要測試的類名+Test

創(chuàng)建的單元測試項目結(jié)構(gòu)如下:

UnitTest1是默認(rèn)生成的測試類,可以刪掉。

5、新建測試類

在單元測試項目上右鍵,選擇“添加”->“類”,然后選擇測試下面的單元測試

約定:要測試的類和測試的方法以Test結(jié)尾。

單元測試默認(rèn)在Microsoft.VisualStudio.TestTools.UnitTesting命名空間下面。

6、編寫測試代碼

編寫測試代碼前首先要添加對測試項目的引用,要測試哪個項目就要添加對哪個項目的引用。測試方法上面要添加特性[TestMethod],表示是一個測試方法。添加是否是三角形方法的測試代碼,測試代碼如下:

/// <summary>
/// 測試是否是三角形這個方法
/// </summary>
[TestMethod]
public void IsTriangleTest()
{
      #region 測試用例一
      // 初始化屬性
      float SideLength1 = 0f;
      float SideLength2 = 0f;
      float SideLength3 = 0f;
      // 實例化
      riangle target = new Triangle(SideLength1, SideLength2, SideLength3);
       // 定義一個變量,保存期待的結(jié)果
       bool excepted = false;
       // 定義一個變量,保存實際的結(jié)果
       bool actual;
       actual = target.IsTriangle();
       // 斷言期待的結(jié)果和實際的結(jié)果是否相等,如果相等表示測試通過,否則測試失敗
       Assert.AreEqual(excepted, actual); 
       #endregion
}

7、運行測試代碼

在運行測試代碼以前,需要打開測試資源管理器窗口和代碼覆蓋率結(jié)果窗口,在菜單欄的測試?yán)锩娲蜷_

運行測試代碼,可以在測試方法上面右鍵選擇運行測試:

或者選擇菜單欄測試?yán)锩娴倪\行:

或者是在測試資源管理器里面的測試方法上面直接右鍵:

運行測試代碼,查看測試結(jié)果:

表示測試通過。

注意:在測試方法里面添加斷點,可以進(jìn)行調(diào)試,可以按照上面的三種方式選擇調(diào)試測試。

查看代碼覆蓋率:

從上面的截圖中可以看出,代碼覆蓋率只要25%,說明測試代碼寫的還不夠全面。需要繼續(xù)完善單元測試的代碼。

8、Assert類

Assert:斷言

在Microsoft.VisualStudio.TestTools.UnitTesting命名空間中。

Assert類是一個靜態(tài)類。

序號方法描述
1AreEqual判斷兩個值是否相等,如果兩個值不相等,則測試失敗。有多個重載
2AreNotEqual判斷兩個值是否不相等,如果兩個值相等,則測試失敗。有多個重載
3AreSame判斷引用的對象是否相同。如果兩個輸入內(nèi)容引用不相同的對象,則測試失敗。
4AreNotSame判斷引用的對象是否不相同。如果兩個輸入內(nèi)容引用相同的對象,則測試失敗。
5Fail斷言失敗
6Inconclusive表示無法證明為true或false的測試結(jié)果
7IsFalse指定的條件是否為false。如果該條件為true,則測試失敗。
8IsTrue指定的條件是否為true。如果該條件為false,則測試失敗。
9IsInstanceofType測試指定的對象是否為所需類型的實例。如果所需的實例不在該對象的繼承層次結(jié)構(gòu)中,則測試失敗。
10IsNotInstanceOfType測試指定的對象是否為所需類型的實例。如果所需的實例在該對象的繼承層次結(jié)構(gòu)中,則測試失敗。
11IsNull測試指定的對象是否為空。
12IsNotNull測試指定的對象是否為非空。

9、單元測試中的特性

TestClass特性

用于標(biāo)識類是一個測試類。

用法:在類上面標(biāo)注[TestClass]

測試類的命名方式:<被測試類的類名>Test

TestMethod特性

用于標(biāo)識一個測試方法。

用法:在測試方法上面標(biāo)注[TestMethod]

測試方法的命名方式:<被測試方法的方法名>Test

注意:在測試方法上面一定要添加TestMethod特性,否則該方法不會被執(zhí)行。

10、代碼覆蓋率

代碼覆蓋率是單元測試寫的是否合理或是否達(dá)到要求的一個唯一的標(biāo)準(zhǔn)。

代碼覆蓋率是測試代碼所運行到的實際程序路徑的覆蓋率。

四、單元測試的標(biāo)準(zhǔn)

1、哪些代碼需要單元測試

a、既有代碼添加單元測試的步驟

第一步:對所有程序集中的公開類以及公開類里面的公開方法添加單元測試。

第二步:對于構(gòu)造函數(shù)和公共屬性進(jìn)行單元測試。

第三步:添加全面單元測試。

b、給哪些代碼添加單元測試

針對屬于框架技術(shù)中的代碼添加單元測試。

為業(yè)務(wù)邏輯層對界面公開的方法添加單元測試。

c、對應(yīng)剛開始的項目,應(yīng)該對所有公開的方法和屬性都添加單元測試。

2、單元測試代碼的寫法

a、編寫單元測試代碼時注意事項

所測試的方法的代碼覆蓋率必須達(dá)到100%。

所測試的代碼內(nèi)部的狀態(tài)。

被測試的代碼所使用的外部設(shè)備的狀態(tài)。(比如打印機(jī)的狀態(tài))

b、怎么提高代碼覆蓋率

邊界條件數(shù)據(jù)。

空數(shù)據(jù)。

格式不正確數(shù)據(jù)。

3、單元測試是否達(dá)到預(yù)期值

代碼覆蓋率100%并不能完全保證代碼正確。

需要對執(zhí)行的結(jié)果進(jìn)行斷言。

平均每5行測試代碼要有一個斷言。

測試外部設(shè)備狀態(tài)更改時,測試是否正常通過。

到此這篇關(guān)于Visual Studio編寫單元測試的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用Asp.Net Core的MiddleWare思想如何處理復(fù)雜業(yè)務(wù)流程詳解

    利用Asp.Net Core的MiddleWare思想如何處理復(fù)雜業(yè)務(wù)流程詳解

    這篇文章主要給大家介紹了關(guān)于利用Asp.Net Core的MiddleWare思想如何處理復(fù)雜業(yè)務(wù)流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧
    2018-08-08
  • .NET Core配置多環(huán)境的方法步驟

    .NET Core配置多環(huán)境的方法步驟

    配置多環(huán)境是日常開發(fā)經(jīng)常需要用到的操作,實現(xiàn)多環(huán)境配置后可以規(guī)避生產(chǎn)測試環(huán)境混合帶來的麻煩和風(fēng)險,這篇文章主要介紹了.NET Core配置多環(huán)境的方法步驟,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C# new和override的區(qū)別分析

    C# new和override的區(qū)別分析

    C# new和override都會覆蓋父類中的方法。那它們兩者之前有什么區(qū)別呢?
    2013-03-03
  • .Net?Core使用Coravel實現(xiàn)任務(wù)調(diào)度的完整步驟

    .Net?Core使用Coravel實現(xiàn)任務(wù)調(diào)度的完整步驟

    最近在使用調(diào)度程序創(chuàng)建簡單的服務(wù),該服務(wù)將執(zhí)行一些重復(fù)的IO操作,使用的是Coravel調(diào)度庫,下面這篇文章主要給大家介紹了關(guān)于.Net?Core使用Coravel實現(xiàn)任務(wù)調(diào)度的完整步驟,需要的朋友可以參考下
    2022-08-08
  • 時間輕松學(xué)會.NET Core操作ElasticSearch7的方法

    時間輕松學(xué)會.NET Core操作ElasticSearch7的方法

    這篇文章主要介紹了時間輕松學(xué)會.NET Core操作ElasticSearch7,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • MVC文件上傳支持批量上傳拖拽及預(yù)覽文件內(nèi)容校驗功能

    MVC文件上傳支持批量上傳拖拽及預(yù)覽文件內(nèi)容校驗功能

    這篇文章主要介紹了MVC文件上傳支持批量上傳拖拽及預(yù)覽文件內(nèi)容校驗功能,需要的朋友可以參考下
    2017-03-03
  • ASP.NET?Core?Web?API中實現(xiàn)監(jiān)控的方法

    ASP.NET?Core?Web?API中實現(xiàn)監(jiān)控的方法

    本文介紹了在ASP.NETCoreWebAPI中實現(xiàn)監(jiān)控的幾種流行開源工具,可以監(jiān)控API的性能、請求、響應(yīng)時間、錯誤率等,具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • C#中實現(xiàn)偽靜態(tài)頁面兩種方式介紹

    C#中實現(xiàn)偽靜態(tài)頁面兩種方式介紹

    偽靜態(tài)技術(shù)的誕生,帶動了于搜索引擎友好C#中實現(xiàn)偽靜態(tài)頁面有兩種方式,本文將一一詳解,感興趣的朋友可以參考下,希望本文對你學(xué)習(xí)偽靜態(tài)有所幫助
    2013-01-01
  • ASP.Net Core中使用枚舉類而不是枚舉的方法

    ASP.Net Core中使用枚舉類而不是枚舉的方法

    這篇文章主要給大家介紹了關(guān)于ASP.Net Core中使用枚舉類而不是枚舉的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.Net Core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • .net后臺頁面統(tǒng)一驗證是否登錄

    .net后臺頁面統(tǒng)一驗證是否登錄

    這篇文章主要為大家詳細(xì)介紹了.net后臺頁面統(tǒng)一驗證是否登錄的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

桃江县| 泸定县| 普兰店市| 巨鹿县| 三江| 塔河县| 鄯善县| 阳泉市| 巩留县| 新乡县| 龙岩市| 开远市| 苍南县| 濉溪县| 乌兰县| 榆林市| 扎赉特旗| 蓝田县| 吴忠市| 荣成市| 清水河县| 日照市| 资中县| 宜宾市| 永仁县| 剑阁县| 儋州市| 香港 | 永顺县| 新龙县| 红原县| 班戈县| 泸定县| 商丘市| 绍兴市| 台北县| 云龙县| 大安市| 乌海市| 合江县| 娄烦县|