日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

关于C#程序的单元测试

發(fā)布時(shí)間:2023/12/10 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于C#程序的单元测试 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 1.單元測(cè)試概念
  • 2.單元測(cè)試的原則
  • 3.單元測(cè)試簡(jiǎn)單示例
  • 4.單元測(cè)試框架特性標(biāo)簽
  • 5.單元測(cè)試中的斷言Assert
  • 6.單元測(cè)試中驗(yàn)證預(yù)期的異常
  • 7.單元測(cè)試中針對(duì)狀態(tài)的間接測(cè)試
  • 8.單元測(cè)試在MVC模式中的實(shí)現(xiàn)
  • 8.單元測(cè)試相關(guān)參考
  • 9.示例源代碼下載

志銘-2020年1月23日 11:49:41


1.單元測(cè)試概念

  • 什么是單元測(cè)試?

    單元測(cè)試(unit testing)是一段自動(dòng)化的代碼,用來(lái)調(diào)用被測(cè)試的方法或類,而后驗(yàn)證基于該方法或類的邏輯行為的一些假設(shè)。

    簡(jiǎn)而言之說(shuō):單元測(cè)試是一段代碼(通常一個(gè)方法)調(diào)用另外一段代碼,隨后檢驗(yàn)一些假設(shè)的正確性。

    在過(guò)程化編程中,一個(gè)單元就是單個(gè)程序、函數(shù)、過(guò)程等;

    對(duì)于面向?qū)ο缶幊?#xff0c;最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

  • 為什么要單元測(cè)試?

    單元測(cè)試的目標(biāo)是隔離程序部件并證明這些單個(gè)部件是正確的。單元測(cè)試在軟件開(kāi)發(fā)過(guò)程的早期就能發(fā)現(xiàn)問(wèn)題。

    在代碼重構(gòu)或是修改的時(shí)候,可以根據(jù)單元測(cè)試快速驗(yàn)證新修改的代碼的正確性,換句話說(shuō)為了方便系統(tǒng)的后期維護(hù)升級(jí)!

    單元測(cè)試某種程度上相當(dāng)于系統(tǒng)的文檔。借助于查看單元測(cè)試提供的功能和單元測(cè)試中如何使用程序單元,開(kāi)發(fā)人員可以直觀的理解程序單元的基礎(chǔ)API,即提高了代碼的可讀性!

    若是開(kāi)發(fā)流程按照測(cè)試驅(qū)動(dòng)開(kāi)發(fā)則先行編寫的單元測(cè)試案例就相當(dāng)于:軟件工程瀑布模式中第二階段——設(shè)計(jì)階段的文檔
    使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā),可以避免實(shí)際開(kāi)發(fā)中編程人員不完全按照文檔規(guī)范,因?yàn)槭腔趩卧獪y(cè)試設(shè)計(jì)方法,開(kāi)發(fā)人員不遵循設(shè)計(jì)要求的解決方案永遠(yuǎn)不會(huì)通過(guò)測(cè)試。

  • 什么時(shí)候需要單元測(cè)試?

    “單元測(cè)試通常被認(rèn)為是編碼階段的附屬工作。可以在編碼開(kāi)始之前或源代碼生成之后進(jìn)行單元測(cè)試的設(shè)計(jì)。”——《軟件工程:實(shí)踐者的研究方法》

    對(duì)于需要長(zhǎng)期維護(hù)的項(xiàng)目,單元測(cè)試可以說(shuō)是必須的

    通常來(lái)說(shuō),程序員每修改一次程序就會(huì)進(jìn)行最少一次單元測(cè)試,在編寫程序的過(guò)程中前后很可能要進(jìn)行多次單元測(cè)試,以保證沒(méi)有程序錯(cuò)誤;雖然單元測(cè)試不是必須的,但也不壞,這牽涉到項(xiàng)目管理的政策決定。

  • 單元測(cè)試誰(shuí)來(lái)編寫?

    不需要專門的軟件測(cè)試人員編寫測(cè)試案例,單元測(cè)試通常由軟件開(kāi)發(fā)人員編寫。

    也正式因?yàn)槭情_(kāi)發(fā)人員自己寫單元測(cè)試部分,也可以讓開(kāi)發(fā)者仔細(xì)的思考自己方法和接口是否可以更加便于調(diào)用

  • 單元測(cè)試局限性

    不能發(fā)現(xiàn)集成錯(cuò)誤、性能問(wèn)題、或者其他系統(tǒng)級(jí)別的問(wèn)題。單元測(cè)試結(jié)合其他軟件測(cè)試活動(dòng)更為有效。

  • 單元測(cè)試框架

    通常在沒(méi)有特定框架支持下,自行創(chuàng)建一個(gè)項(xiàng)目作為單元測(cè)試項(xiàng)目完全是可行的。
    使用單元測(cè)試框架,同時(shí)配合編輯器VS,編寫單元測(cè)試相對(duì)來(lái)說(shuō)會(huì)簡(jiǎn)單許多。
    .NET下的單元測(cè)試框架:MSTest、NUnit


?


?

2.單元測(cè)試的原則

根本原則:

  • Automatic(自動(dòng)化)
    單元測(cè)試應(yīng)該是全自動(dòng)執(zhí)行的,并且非交互式的
  • Independent
    單元測(cè)試方法的執(zhí)行順序無(wú)關(guān)緊要
    單元測(cè)試的各個(gè)方法之間不應(yīng)該相互依賴
  • Repeatable
    功能代碼不改的前提下,相同的測(cè)試代碼多次運(yùn)行,應(yīng)該得到相同的結(jié)果
  • Self-validating
    單元測(cè)試方法只有兩個(gè)可能的運(yùn)行結(jié)果:通過(guò)或失敗,沒(méi)有第三種情況。

其他一些規(guī)范:

  • 最理想的情況下,應(yīng)該盡量多寫測(cè)試用例,以保證代碼功能的正確性符合預(yù)期,具有良好的容錯(cuò)性。如果代碼較復(fù)雜,條件分支較多,測(cè)試用例最好能覆蓋所有的分支路徑。

  • 實(shí)際開(kāi)發(fā)中,沒(méi)有必要對(duì)每一個(gè)函數(shù)都進(jìn)行單元測(cè)試。但是若是一個(gè)比較獨(dú)立的功能(當(dāng)然也可能這個(gè)功能就一個(gè)函數(shù)),應(yīng)該對(duì)這個(gè)功能進(jìn)行比較詳盡的測(cè)試。

  • 單元測(cè)試的基本目標(biāo):語(yǔ)句覆蓋率達(dá)到 70%;核心模塊的語(yǔ)句覆蓋率和分支覆蓋率都要達(dá)到 100%。

  • 注意一個(gè)類中可能有許多方法,我們不是要把所有的方法的單元測(cè)試都寫完,在去實(shí)現(xiàn)代碼,而是寫完一個(gè)單元測(cè)試,就去實(shí)現(xiàn)一個(gè)方法,是一種快速的迭代

  • 不測(cè)試私有方法,因?yàn)樗接蟹椒ú槐煌獠空{(diào)用,測(cè)試意義不大,而且你非要測(cè)試,那就要使用反射,比較麻煩。

  • 一個(gè)測(cè)試只測(cè)試一個(gè)功能


?


?

3.單元測(cè)試簡(jiǎn)單示例

3.1一個(gè)簡(jiǎn)單的手寫單元測(cè)試實(shí)例

為了簡(jiǎn)潔明了的說(shuō)明什么是單元測(cè)試,首先不使用單元測(cè)試框架,自行編寫單元測(cè)試項(xiàng)目

比如說(shuō)新建了一個(gè)類Calculator用于對(duì)數(shù)據(jù)的計(jì)算,

如下只是隨便的的寫了個(gè)方法,方便理解:

public class Calculator {//求一個(gè)數(shù)的二倍public int DoubleValue(int i){return i * 2;} }

新建了Calculator類之后,我們編寫單元測(cè)試代碼對(duì)該類中方法進(jìn)行單元測(cè)試:
首先新建一個(gè)項(xiàng)目,對(duì)待測(cè)試的方法所在的項(xiàng)目添加引用,

編寫代碼,測(cè)試ClassLib項(xiàng)目中Calculator類中的DoubleValue()方法

測(cè)試DoubleValue(int value),該函數(shù)是求一個(gè)數(shù)的二倍,給其一個(gè)參數(shù)value=2,則期望其得到的結(jié)果是4,若是其他值則說(shuō)明函數(shù)編寫是錯(cuò)誤的,測(cè)試不通過(guò)。若是該函數(shù)的運(yùn)行結(jié)果和期望的結(jié)果一樣則運(yùn)行通過(guò)

public static void CalculatorDoubleValueTest() { //生成一個(gè)測(cè)試對(duì)象的實(shí)例Calculator obj = new Calculator();//設(shè)計(jì)測(cè)試案例int value = 2;int expected = 4;//與預(yù)期比較if (expected == obj.DoubleValue(value)){Console.WriteLine("測(cè)試通過(guò)");}else{Console.WriteLine($"測(cè)試未通過(guò),測(cè)試的實(shí)際結(jié)果是{obj.DoubleValue(value)}");}Console.ReadKey(); }

通過(guò)上面的示例,簡(jiǎn)單的演示了單元測(cè)試是什么,但是實(shí)際中一般都是使用已有的單元測(cè)試框架。而且測(cè)試一個(gè)方法為了完備性一般都要到所有的邏輯路徑進(jìn)行測(cè)試,所以會(huì)對(duì)一個(gè)方法寫多個(gè)測(cè)試方法。

3.2單元測(cè)試框架MSTest

單元測(cè)試一般都是使用現(xiàn)成的單元測(cè)試框架,關(guān)于.net的單元測(cè)試框架有許多,常見(jiàn)的有NUnit,MSTest等等。

這里使用VS自帶的MStest框架做簡(jiǎn)單的演示(一般推薦使用NUnit框架:Undone)

演示的案例,繼續(xù)對(duì)上述的Calculator類中的DoubleValue()進(jìn)行單元測(cè)試

注意:通常的做法是為每個(gè)被測(cè)項(xiàng)目建立一個(gè)測(cè)試項(xiàng)目,為每個(gè)被測(cè)類建立一個(gè)測(cè)試類,并且為每個(gè)被測(cè)方法至少建立一個(gè)測(cè)試方法。

新建項(xiàng)目--->選擇測(cè)試類項(xiàng)目中的單元測(cè)試項(xiàng)目,命名為"被測(cè)試項(xiàng)目名+Tests"

測(cè)試類的命名為“被測(cè)試的類+Tests”

測(cè)試函數(shù)的命名按照 :**[被測(cè)方法]_ [測(cè)試場(chǎng)景]_[預(yù)期行為]** 格式命名

  • 方法名——被測(cè)試的方法
  • 測(cè)試場(chǎng)景——能產(chǎn)生預(yù)期行為的條件
  • 預(yù)期行為——在給定條件下,期望被測(cè)試方法產(chǎn)生什么結(jié)果

當(dāng)然在VS中也可以在想要測(cè)試的函數(shù)上右鍵,創(chuàng)建單元測(cè)試,彈出如下窗口,直接點(diǎn)擊確定即可,即可生成默認(rèn)的單元測(cè)試代碼模版

這里先使用默認(rèn)自帶的MSTest框架,使用默認(rèn)的命名格式,會(huì)自動(dòng)生成相應(yīng)的測(cè)試項(xiàng)目和測(cè)試函數(shù)格式。

編寫單元測(cè)試的代碼,一般按照以下四步編寫:

Arrange:配置測(cè)試對(duì)象

TestCase:準(zhǔn)備測(cè)試案例

Act:操作測(cè)試對(duì)象

Assert:對(duì)操作斷言

//注意 [TestClass]和[TestClass()],[TestMethod()]和[TestMethod]寫法等價(jià) namespace ClassLib.Tests {[TestClass()]//通過(guò)標(biāo)注該特性標(biāo)簽表明該類為測(cè)試類public class CalculatorTests{[TestMethod()]//通過(guò)標(biāo)注該特性標(biāo)簽表明該函數(shù)為測(cè)試函數(shù)public void DoubleValueTest_DoubleValue_ReturnTrue(){//Arrange:準(zhǔn)備,實(shí)例化一個(gè)帶測(cè)試的類Calculator obj = new Calculator();//Test Case:設(shè)計(jì)測(cè)試案例int value = 2;int expected = 4;//Act:執(zhí)行int actual = obj.DoubleValue(value);//Assert:斷言Assert.AreEqual(expected, actual);}} }

點(diǎn)擊測(cè)試-->運(yùn)行-->所有測(cè)試
或點(diǎn)擊測(cè)試-->窗口-->測(cè)試資源管理器-->運(yùn)行所有測(cè)試

上面運(yùn)行顯示測(cè)試通過(guò)顯示的是綠色的標(biāo)志,若是測(cè)試不通過(guò)則會(huì)則顯示紅色標(biāo)志,在單元測(cè)試中有一種“紅綠燈”的概念(你是使用其他的單元測(cè)試框架也是同樣的紅綠標(biāo)志)。

在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的流程中,就是“紅燈-->修改-->綠燈-->重構(gòu)-->綠燈”的開(kāi)發(fā)流程。

注意:我是使用的不是VS Enterprise版本故無(wú)法直接查看代碼的測(cè)試覆蓋率,可以使用插件OpenCover或NCover等其他工具查看單元測(cè)試的覆蓋率。

上面只是演示了怎么進(jìn)行一次單元測(cè)試,但是實(shí)際中我們的測(cè)試案例不能僅僅一個(gè),所以要添加多個(gè)測(cè)試,以提高到測(cè)試的完備性

若是對(duì)需要大量測(cè)試案例的,可以把測(cè)試數(shù)據(jù)存放在專門的用于測(cè)試使用的數(shù)據(jù)庫(kù)中,在測(cè)試時(shí)通過(guò)連接數(shù)據(jù)庫(kù),使用數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行測(cè)試

依舊是上面的示例,把大量的測(cè)試案例存放在數(shù)據(jù)庫(kù)

Id Input Expected -------------------- ----------- ----------- 1 2 4 2 6 12 3 13 26 4 0 0 5 -2 -4

單元測(cè)試的代碼如下

public TestContext TestContext { get; set; }//注意為了獲取數(shù)據(jù)庫(kù)的數(shù)據(jù),我們要自定義一個(gè)TestContext屬性 [TestMethod()] [DataSource("System.Data.SqlClient",@"server=.;database=db_Tome1;uid=sa;pwd=shanzhiming",//數(shù)據(jù)庫(kù)連接字符串"tb_szmUnitTestDemo",//測(cè)試數(shù)據(jù)存放的表DataAccessMethod.Sequential)]//對(duì)表中的數(shù)據(jù)測(cè)試的順序,可以是順序的,也可以是隨機(jī)的,這里是我們選擇順序 public void DoubleValueTest_DoubleValue_ReturnTrue() {//ArrangeCalculator target = neCalculator();//TestCaseint value = Convert.ToInt(TestContext.DataR["Input"]);int expected Convert.ToInt(TestContext.DataR["Expected"]);//Actint actual target.DoubleValu(value);//AssertAssert.AreEqual(expected, actual); }

說(shuō)明:

  • 特性標(biāo)簽[TestClass]?[TestMethod]

    MSTest框架通過(guò)標(biāo)簽識(shí)別并加載測(cè)試

    [TestClass]用來(lái)標(biāo)識(shí)包含一個(gè)MSTest自動(dòng)好測(cè)試的類,

    [TestMethod]用來(lái)標(biāo)識(shí)需要被調(diào)用的自動(dòng)化測(cè)試的方法

  • 特性標(biāo)簽[DataSource]標(biāo)識(shí)用來(lái)測(cè)試的數(shù)據(jù)源,其的參數(shù)如下:

    • 第一個(gè)參數(shù)是providername,即使用的數(shù)據(jù)源的命名空間,其實(shí)我們也是可是使用Excel表格的(菜單“項(xiàng)目”-->添加新的數(shù)據(jù)源……)參考:CSDN:vs2015數(shù)據(jù)驅(qū)動(dòng)的單元測(cè)試

      providername值參考:

      • "system.data.sqlclient"?----說(shuō)明使用的是mssqlserver數(shù)據(jù)庫(kù)

      • "system.data.sqllite"?----說(shuō)明使用的是sqllite數(shù)據(jù)庫(kù)

      • "system.data.oracleclient"?----說(shuō)明使用的是oracle數(shù)據(jù)庫(kù)或

      • "mysql.data.mysqlclient"?----說(shuō)明使用的是mysql數(shù)據(jù)庫(kù)

    • 第二個(gè)參數(shù)是connectionString,我習(xí)慣是這樣寫:

      @"server=.;database=數(shù)據(jù)庫(kù);uid=用戶ID;pwd=密碼"

      但是推薦這樣寫:

      @"Data Source=localhost;Initial Catalog=數(shù)據(jù)庫(kù);User ID=用戶ID;Password=密碼"

    • 第三個(gè)參數(shù)是tablename,選擇使用的數(shù)據(jù)庫(kù)中的哪張表

    • 第四個(gè)參數(shù)確定對(duì)表中的數(shù)據(jù)測(cè)試的順序.
      可以是順序的:DataAccessMethod.Sequential,
      可以是隨機(jī)的:DataAccessMethod.Random


  • ?


    ?

    4.單元測(cè)試框架特性標(biāo)簽

    在MSTest單元測(cè)試框架中主要有以下的一些特性標(biāo)簽:

    (參考)

    MS Test Attribute用途
    [TestClass]定義一個(gè)測(cè)試類,里面可以包含很多測(cè)試函數(shù)和初始化、銷毀函數(shù)(以下所有標(biāo)簽和其他斷言)。
    [TestMethod]定義一個(gè)獨(dú)立的測(cè)試函數(shù)。
    [ClassInitialize]定義一個(gè)測(cè)試類初始化函數(shù),每當(dāng)運(yùn)行測(cè)試類中的一個(gè)或多個(gè)測(cè)試函數(shù)時(shí),這個(gè)函數(shù)將會(huì)在測(cè)試函數(shù)被調(diào)用前被調(diào)用一次(在第一個(gè)測(cè)試函數(shù)運(yùn)行前會(huì)被調(diào)用)。
    [ClassCleanup]定義一個(gè)測(cè)試類銷毀函數(shù),每當(dāng)測(cè)試類中的選中的測(cè)試函數(shù)全部運(yùn)行結(jié)束后運(yùn)行(在最后一個(gè)測(cè)試函數(shù)運(yùn)行結(jié)束后運(yùn)行)。
    [TestInitialize]定義測(cè)試函數(shù)初始化函數(shù),每個(gè)測(cè)試函數(shù)運(yùn)行前都會(huì)被調(diào)用一次。
    [TestCleanup]定義測(cè)試函數(shù)銷毀函數(shù),每個(gè)測(cè)試函數(shù)執(zhí)行完后都會(huì)被調(diào)用一次。
    [AssemblyInitialize]定義測(cè)試Assembly初始化函數(shù),每當(dāng)這個(gè)Assembly中的有測(cè)試函數(shù)被運(yùn)行前,會(huì)被調(diào)用一次(在Assembly中第一個(gè)測(cè)試函數(shù)運(yùn)行前會(huì)被調(diào)用)。
    [AssemblyCleanup]定義測(cè)試Assembly銷毀函數(shù),當(dāng)Assembly中所有測(cè)試函數(shù)運(yùn)行結(jié)束后,運(yùn)行一次。(在Assembly中所有測(cè)試函數(shù)運(yùn)行結(jié)束后被調(diào)用)
    [Ignore]跳過(guò)(忽略)該測(cè)試函數(shù)
    [TestCategory("測(cè)試類別")]給測(cè)試自定義分類,便于有選擇的運(yùn)行指定類別的單元測(cè)試

    說(shuō)明:

    • 使用[ClassInitialize]和[ClassCleanup]標(biāo)簽特性

      可以在測(cè)試之前或之后方便地控制測(cè)試的初始化和清理,從而確保所有的測(cè)試都是使用新的未更改的狀態(tài)。

      注意,這是很有必要的,可以有效的防止測(cè)試失敗是因?yàn)闇y(cè)試之間的依賴性導(dǎo)致失敗。

      注意兩個(gè)標(biāo)簽特性需要放在一個(gè)無(wú)返回值的靜態(tài)方法上,

      且標(biāo)注[ClassInitialize]特性的方法的參數(shù)是:TestContext testcontext

      示例:比如說(shuō)在一個(gè)測(cè)試類初始化一個(gè)測(cè)試對(duì)象,并在測(cè)試完成后釋放,代碼如下:

    [TestClass()] public class CalculatorTests {//使用ClassInitialize標(biāo)簽初始化一個(gè)Calculator對(duì)象以供下面所有的測(cè)試([ClassCleanup]之前)使用private static Calculator calc = null;[ClassInitialize]public static void ClassInit(TestContext testcontext){calc = new Calculator();}[TestMethod()]public void testMethod1(){//測(cè)試}[TestMethod()]public void testMethod2(){//測(cè)試}[TestMethod()]public void testMethod3(){//測(cè)試}[ClassCleanup]public static void Classup(){calc = null;} }


    ?


    ?

    5.單元測(cè)試中的斷言Assert

  • 斷言是什么?可以從字面理解是“十分肯定的說(shuō)”,在編程中可以通過(guò) 不同的斷言來(lái)測(cè)試方法實(shí)際運(yùn)行的結(jié)果和你期望的結(jié)果是否一致。

  • 斷言是單元測(cè)試最基本的組成部分,Assert類的靜態(tài)方法提供了不同形式的多種斷言。
    MStest中Assert的常用靜態(tài)方法:(參考):

    MS Test Assert用途
    Assert.AreEqual()驗(yàn)證值相等
    Assert.AreNotEqual()驗(yàn)證值不相等
    Assert.AreSame()驗(yàn)證引用相等
    Assert.AreNotSame()驗(yàn)證引用不相等
    Assert.Inconclusive()暗示條件還未被驗(yàn)證
    Assert.IsTrue()驗(yàn)證條件為真
    Assert.IsFalse()驗(yàn)證條件為假
    Assert.IsInstanceOfType()驗(yàn)證實(shí)例匹配類型
    Assert.IsNotInstanceOfType()驗(yàn)證實(shí)例不匹配類型
    Assert.IsNotNull()驗(yàn)證條件為NULL
    Assert.IsNull()驗(yàn)證條件不為 NULL
    Assert.Fail()驗(yàn)證失敗
  • 針對(duì)字符串的斷言,使用StringAssert的靜態(tài)方法:

    注意可以根據(jù)VS的只能提示自行查看StringAssert的所有靜態(tài)方法,或是查看StringAssert的定義,可以查看其所有的靜態(tài)方法

    詳細(xì)使用可參考

    StringAssert用途
    StringAssert.AreEqualIgnoringCase(string expected,string actual)用于斷言 兩個(gè)字符串在不區(qū)分大小寫情況下是否相等,需要提供兩個(gè)參 數(shù),第一個(gè)是期待的結(jié)果,第二個(gè)是實(shí)際結(jié)果.
    StringAssert.Contains()用于斷言一個(gè)字符串是否包含另一字符串,其中第一個(gè)參數(shù)為被包含的字符串,第二個(gè)為實(shí)際字符串
    StringAssert.StartsWith()斷言字符串是否以某(幾)字符開(kāi)始, 第一個(gè)參數(shù)為開(kāi)頭的字符串 ,第二個(gè)為實(shí)際字符串
    StringAssert.EndsWith()斷言字符串是否以某(幾)字符結(jié)束
    StringAssert.Matches()斷言字符串是否符合特定的正則表達(dá)式
  • 針對(duì)集合的斷言,使用CollectionAssert的靜態(tài)方法:

    注意可以根據(jù)VS的只能提示自行查看CollectionAssert所有的靜態(tài)方法,或是查看CollectionAssert的定義,可以查看其所有的靜態(tài)方法

    詳細(xì)使用可參考

    CollectiongAssert用途
    CollectionAssert.AllItemsAreNotNull斷言集合里的元素全部不是Null,也即集合不包含null元素,這個(gè)方法只有一個(gè)參數(shù),傳入我們要判斷的集合即可
    CollectionAssert.AllItemsAreUnique斷言集合里面的元素全部是惟一的,即集合里沒(méi)有重復(fù)元素.
    CollectionAssert.AreEqual用于斷言兩個(gè)集合是否相等
    CollectionAssert.AreEquivalent用來(lái)判斷兩個(gè)集合的元素是否等價(jià),如果兩個(gè)集合元素類型相同,個(gè)數(shù)也相同,即視為等價(jià),與上面的AreEqual方法相比,它不關(guān)心順序
    CollectionAssert.Contains斷言集合是否包含某一元素
    CollectionAssert.IsEmpty斷言某一集合是空集合,即元素個(gè)數(shù)為0
    CollectionAssert.IsSubsetOf判斷一個(gè)集合是否為另一個(gè)集合的子集,這兩個(gè)集合不必是同一類集合(可以一個(gè)是array,一個(gè)是list),只要一個(gè)集合的元素完全包含在另一個(gè)集合中,即認(rèn)為它是另一個(gè)集合的子集

  • ?


    ?

    6.單元測(cè)試中驗(yàn)證預(yù)期的異常

    若是程序中在某種特定的條件下有異常拋出,為了進(jìn)行單元測(cè)試,我們?cè)O(shè)計(jì)指定的測(cè)試案例,期望在該測(cè)試案例程序拋出異常,并檢驗(yàn)其是否拋出異常。

    簡(jiǎn)單示例:

    /// <summary> /// 計(jì)算從from到to的所有整數(shù)的和 /// </summary> public int Sum(int from, int to) {if (from > to){throw new ArgumentException("參數(shù)from必須小于to");}int sum = 0;for (int i = from; i <= to; i++){sum += i;}return sum; }

    在程序中,若是參數(shù)from?>to則拋出異常new ArgumentException("參數(shù)from必須小于to");

    為了檢驗(yàn)該程序在該條件下是否真的會(huì)拋出異常,可以創(chuàng)造測(cè)試案例from=100 > to=50
    期望Sum()函數(shù)代碼中執(zhí)行:throw new ArgumentException("參數(shù)from必須小于to");,所以我們要測(cè)試期望拋出的異常ArgumentException。

    使用標(biāo)簽[ExpectedException(typeof(“拋出的異常對(duì)象”))]

    單元測(cè)試代碼:

    //異常測(cè)試,添加ExpectedException [TestMethod] [ExpectedException(type(ArgumentException))] public void SumTest_ArgumentException_TrowException() {Calculator bjCalcultor = new Calculator();int from=100,to=50;calc.Sum(from, to); }

    因?yàn)槌绦驋伋隽宋覀兤谕漠惓?#xff0c;所以該測(cè)試通過(guò)。如若程序沒(méi)有拋出該異常則測(cè)試失敗。


    ?


    ?

    7.單元測(cè)試中針對(duì)狀態(tài)的間接測(cè)試

    • 基于狀態(tài)的測(cè)試(也稱狀態(tài)驗(yàn)證),是指在方法執(zhí)行之后,通過(guò)檢查被測(cè)系統(tǒng)及其協(xié)作者(依賴項(xiàng))的狀態(tài)來(lái)檢測(cè)該方法是否正確工作

    • 簡(jiǎn)單示例:

      下面的方法isLastFilenameValid(string filename)在運(yùn)行后會(huì)改變類中屬性wasLastFileNameValid的值

    //用于存儲(chǔ)狀態(tài)的結(jié)果用于以后的驗(yàn)證 public bool wasLastFileNameValid { get; set; } //判斷輸入的字符串是否是.txt文件名 public bool isLastFilenameValid(string filename) {if (!(filename .ToLower()).EndsWith("txt")){wasLastFileNameValid = false;return false ;}else{wasLastFileNameValid = true;return true;} }
    • 單元測(cè)試函數(shù):

      該測(cè)試是測(cè)試isLastFilenameValid(),

      因?yàn)樵摵瘮?shù)是把結(jié)果賦值給類中屬性wasLastFileNameValid,

      所以此處驗(yàn)證的是Calculator類中屬性wasLastFileNameValid是否符合我們的期望,

      而不是簡(jiǎn)單的驗(yàn)證isLastFilenameValid()的返回值是否符合我們的期望。

    [TestMethod()] public void isLastFilenameValid_ValidName_ReturnTrue() {Calculator calc = new Calculator();string fileName = "test.txt";calc.isLastFilenameValid(fileName)Assert.IsTrue(calc.wasLastFileNameValid);}


    ?


    ?

    8.單元測(cè)試在MVC模式中的實(shí)現(xiàn)

    參考

    • 因?yàn)镸VC模式中的Controller類中的Action的返回值是和普通類的方法不一樣的,

      Action的返回值是ActionResult類型的,其子類又有許多,

      具體怎么實(shí)現(xiàn)對(duì)MVC模式的單元測(cè)試呢?請(qǐng)看一個(gè)簡(jiǎn)單的示例:

      代碼背景:在一個(gè)MVC項(xiàng)目中的HomeController控制器中有一個(gè)Action是Index()

      首先先定義一個(gè)Person類其中有Id和Name兩個(gè)屬性

      Action如下:

      public class HomeController : Controller{// GET: Homepublic ActionResult Index(){return View("Index",new Person { Id = 001, Name = "shanzm" });}}

      對(duì)上面的HomeController中的Index()進(jìn)行一個(gè)簡(jiǎn)單的單元測(cè)試

      新建一個(gè)單元測(cè)試項(xiàng)目(或者在創(chuàng)建MVC項(xiàng)目的時(shí)候選中單元測(cè)試的按鈕,則自動(dòng)生成一個(gè)單元測(cè)試項(xiàng)目)

      注意一定要先安裝MVC的程序集,NuGet:Install-Package Microsoft.AspNet.Mvc -Version 5.2.3

      [TestMethod()]public void Index_Index_ReturnTrue(){//Arrage:準(zhǔn)備測(cè)試對(duì)象HomeController hcont = new HomeController();//Act:執(zhí)行測(cè)試函數(shù)ViewResult result =(ViewResult)hcont.Index();var viewName = result.ViewName;Person model = (Person)result.Model;//Assert:斷言符合期望Assert.IsTrue(viewName == "Index" && model.Id == 001 && model.Name == "shanzm"&& );}

    說(shuō)明:

  • 如果View()函數(shù)沒(méi)指定視圖,而是使用默認(rèn)的視圖,則視圖名為空,所以如果名稱不寫的時(shí)候我們可以斷言ViewName是空。

  • 注意在Action中的ViewBag傳遞的數(shù)據(jù)在單元測(cè)試中需要通過(guò)ViewData方式獲取(因?yàn)閂iewBag是對(duì)ViewData的動(dòng)態(tài)封裝,在同一個(gè)Action中二者數(shù)據(jù)相通,此乃ASP.NET MVC的基礎(chǔ),不詳述)

  • 其實(shí)呀,MVC模式作為UI層,有許多東西其實(shí)是很難(但不是不可以)模擬對(duì)象去進(jìn)行單元測(cè)試的,一般其實(shí)不推薦做過(guò)多的單元測(cè)試。(注意不是不做,是不做過(guò)多過(guò)復(fù)雜的單元測(cè)試)


  • ?


    ?

    8.單元測(cè)試相關(guān)參考

    書籍:.NET 單元測(cè)試的藝術(shù)

    書籍:單元測(cè)試之道C#版

    微軟:dotnet文檔

    博客園:對(duì)比MS Test與NUnit Test框架

    博客園:.net持續(xù)集成測(cè)試篇之Nunit文件斷言、字符串?dāng)嘌约凹蠑嘌?/p>

    博客園:.netcore持續(xù)集成測(cè)試篇之MVC層單元測(cè)試

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的关于C#程序的单元测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    偷拍精品一区二区三区 | 日韩aa视频| 日本中文字幕系列 | 久久久久免费网站 | 日韩精品最新在线观看 | 国产一区视频在线播放 | 天天操天天色天天射 | 日韩乱码中文字幕 | 一区二区三区四区五区六区 | 亚洲电影av在线 | 国产最新精品视频 | 日韩网站一区二区 | 国内精品小视频 | 国产一级二级视频 | 精品福利网站 | 精品主播网红福利资源观看 | 色综合中文字幕 | 日日夜夜天天久久 | 丁香免费视频 | 亚洲情婷婷 | 国产一区欧美一区 | 婷婷丁香激情综合 | 日本成人黄色片 | 91视频网址入口 | 国产又粗又猛又爽又黄的视频免费 | avav99| 一区二区三区动漫 | 人人精久 | 2023亚洲精品国偷拍自产在线 | 成人a级大片 | 欧美国产不卡 | 久久免费公开视频 | 久久免费毛片 | 激情欧美一区二区三区 | 国产福利在线免费 | 超碰97在线资源 | 99视频| 国产精品毛片一区视频 | 国产精品a久久久久 | 丁香av在线| 亚洲午夜剧场 | 国产精品亚洲片夜色在线 | 午夜精品久久久久久99热明星 | 日日夜夜av| 国产成人精品一区在线 | 在线观看一级视频 | 国产一区久久久 | 国产精品一区免费看8c0m | 国产xx在线| 久久国产综合视频 | 久久99网 | 日韩欧美在线视频一区二区 | 国产精品第二页 | 午夜久久福利影院 | 国产高清在线a视频大全 | av免费在线网 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 午夜精品一区二区三区免费 | 少妇性色午夜淫片aaaze | 91中文字幕在线观看 | 国产成人精品一二三区 | 日韩精品一区二区三区在线播放 | 超碰99人人 | 日韩理论在线视频 | 日韩久久电影 | 99热亚洲精品 | 国产亚洲精品久久久久久网站 | 美女视频黄频大全免费 | 久久99精品国产麻豆宅宅 | 久久精品超碰 | 五月天视频网 | 久久久久久国产精品 | 午夜视频99| 狠狠操狠狠 | 日日夜日日干 | 激情久久五月天 | 黄色一级在线视频 | 爱色婷婷| 精品国产一区二区三区四区vr | 亚洲欧美精品一区 | 日韩av一区二区三区 | 成人在线视频免费看 | 久久久www成人免费精品 | 久久一区二区三区超碰国产精品 | www一起操 | 日韩午夜精品 | 成人黄大片视频在线观看 | 国产黄色观看 | 国产在线精品二区 | 成人超碰在线 | 九九九九免费视频 | 超碰免费公开 | 欧美一级裸体视频 | 久久精品一区八戒影视 | 99热最新地址 | 成人亚洲精品久久久久 | 狠狠色丁香九九婷婷综合五月 | 欧美成人播放 | 日韩欧美一区二区不卡 | www.国产在线视频 | 91精品久 | 五月综合网站 | 中文国产成人精品久久一 | 狠狠色狠狠色综合日日92 | 在线视频免费观看 | 在线视频麻豆 | 九九综合久久 | 91久久黄色 | 日韩特黄一级欧美毛片特黄 | 亚洲欧美国产日韩在线观看 | 中文字幕色站 | 久久综合狠狠狠色97 | 久草在线视频新 | av观看在线观看 | 超碰在线人人爱 | 蜜桃视频在线观看一区 | 激情xxxx | 美女久久久久久久久久久 | 午夜精品成人一区二区三区 | 日韩中文字幕电影 | 国产成人a亚洲精品v | 亚洲国产偷 | 在线色网站 | 久久久亚洲国产精品麻豆综合天堂 | 狠狠插天天干 | 午夜视频播放 | 狠狠干在线 | 欧美视频二区 | 国产精品专区h在线观看 | 最新久久免费视频 | 韩国精品一区二区三区六区色诱 | 91私密视频 | 国产精品自在欧美一区 | 亚洲国产资源 | 久久久久女人精品毛片九一 | 久操操| 99九九99九九九视频精品 | 国产午夜一区二区 | 国产精品12345| 欧美久久成人 | 日韩一级成人av | 日日碰狠狠躁久久躁综合网 | avsex| 久久无码精品一区二区三区 | 日韩一级电影在线 | 悠悠av资源片 | 国产精品美女免费 | 中文字幕欧美激情 | 亚洲成年人在线播放 | 黄色av一级片 | 国产精品久久久久久久久费观看 | 中文字幕在线看人 | 成人超碰在线 | 久久免费视频网 | 98涩涩国产露脸精品国产网 | 国产大陆亚洲精品国产 | 黄色毛片观看 | 欧美天天干 | 国产精品久久久99 | 国产不卡网站 | 人人草人| 最近中文字幕免费av | 天天激情 | 欧美精品久久 | 婷婷在线资源 | 超碰在线日本 | 日韩伦理一区二区三区av在线 | 国产精品欧美久久久久无广告 | 97色资源| 亚洲aⅴ在线观看 | 亚洲dvd | 国产成人精品一区二区 | 91在线看网站 | 美女视频黄是免费的 | 免费视频 你懂的 | 88av色| 久久精品美女视频网站 | 久久久影视 | 久久久精品欧美一区二区免费 | 在线看片日韩 | 人人盈棋牌 | 久草视频免费看 | 97超碰人人| 91人人澡| 婷婷六月中文字幕 | 黄色大片网 | 97热久久免费频精品99 | 成 人 黄 色 免费播放 | 国产成人久久77777精品 | 成人动漫一区二区 | www.五月婷 | 成人禁用看黄a在线 | 国际精品久久久久 | 国产亚洲精品成人av久久影院 | 国产在线无 | 久久久久久久久久久久久9999 | 99视频久 | 97干com| 成人a视频片观看免费 | 久草在线观看资源 | 天天碰天天操 | 黄色网www | 国产在线视频不卡 | 成人一区二区三区在线 | 欧美日韩高清国产 | 欧美 日韩 成人 | 久久九九免费视频 | 亚洲va在线va天堂 | 国产在线999 | 日韩在线观看 | av黄色成人 | 久久免费资源 | 麻豆视频免费网站 | 久久久久久久久精 | 久久精品区 | 欧美精品中文在线免费观看 | 亚洲免费成人av电影 | 久久免费视频网站 | av中文字幕不卡 | 午夜在线免费视频 | 久久人视频 | 久久精品美女 | 日韩精品专区 | 久久精品资源 | 91视频网址入口 | 丁香婷婷综合网 | 综合在线亚洲 | 亚洲va综合va国产va中文 | 91免费网站在线观看 | 91最新视频在线观看 | 中文字幕亚洲字幕 | 99久久精品国 | 日韩在线短视频 | 青青河边草观看完整版高清 | 日本黄色免费在线观看 | 婷婷性综合 | 国产一级黄色电影 | 日日操网 | 日韩mv欧美mv国产精品 | 免费日韩在线 | 精品国产成人 | 69欧美视频 | 四虎在线影视 | 亚洲黄色影院 | www.天天干 | 久久久精品国产免费观看同学 | 国产精品区二区三区日本 | 国产美女免费观看 | 在线v片免费观看视频 | 日韩在线观看中文 | 91一区二区在线 | 日韩电影一区二区在线 | 欧美一级久久久久 | 免费网址在线播放 | 国产做爰视频 | 一级特黄aaa大片在线观看 | 正在播放五月婷婷狠狠干 | 草久热| 成年人免费av网站 | 中文字幕电影网 | 国产成人精品一区二区三区 | 久草国产在线观看 | 麻豆精品国产传媒 | 国产精品久久久网站 | 久久精品5 | 欧美日韩一区二区视频在线观看 | 国产精选视频 | 夜夜夜夜夜夜操 | 五月天,com | 激情偷乱人伦小说视频在线观看 | 久久夜色精品国产欧美乱极品 | 天天插天天干天天操 | 色就是色综合 | 久久婷婷影视 | 日韩免费在线观看视频 | 91精品一区二区三区蜜桃 | 午夜视频免费在线观看 | 99色在线播放 | 国产一二三区av | 国产精品久久毛片 | 婷婷丁香在线 | www国产亚洲精品久久麻豆 | 久久高清片 | 午夜黄色一级片 | 欧美久久成人 | 超碰人人做 | 欧美日韩一区二区久久 | 日韩在线视频看看 | 亚洲蜜桃av | 久久久久久福利 | av电影av在线 | 香蕉成人在线视频 | 碰超在线观看 | 99在线高清视频在线播放 | a级国产毛片 | 成人在线观看免费 | 狠狠操夜夜 | 国产精久久久久久久 | 天天色天天骑天天射 | 成人黄大片 | 黄色综合 | 久久久久久高清 | 91九色蝌蚪视频网站 | av在线网站免费观看 | 91九色国产蝌蚪 | 狠狠狠狠干 | 婷婷丁香久久五月婷婷 | 夜夜看av| 日韩高清黄色 | 国产欧美中文字幕 | www.com黄色| 免费黄色网址大全 | 在线免费观看成人 | 99国产视频| 欧美做受xxx | 久久婷婷国产 | 天天干天天弄 | 69亚洲精品 | 国产韩国精品一区二区三区 | 麻豆国产精品视频 | 成年美女黄网站色大片免费看 | 国产精品自产拍在线观看蜜 | 国产网站av | 国产美女视频网站 | 97国产精品视频 | 在线免费观看羞羞视频 | 在线看片中文字幕 | 久久精品视频日本 | 日韩成人av在线 | 特级西西444www高清大视频 | 国产麻豆精品久久一二三 | 久久久久综合视频 | 国产日韩欧美自拍 | 成人福利在线播放 | 黄色片网站 | av在线免费在线观看 | 中文字幕乱码日本亚洲一区二区 | 国产精品国产亚洲精品看不卡 | 日韩精品一区二区在线观看 | 五月天激情在线 | 青青射 | 九九九视频精品 | 国产又粗又猛又黄又爽 | 国产精品久久久久久模特 | 婷婷5月色 | 狠狠久久| 午夜av免费 | 91禁在线看| 国产主播大尺度精品福利免费 | 播五月婷婷 | 中文字幕888 | 色综合久久久久综合99 | 97人人模人人爽人人少妇 | 香蕉精品视频在线观看 | 欧美精品一二 | 亚洲日韩欧美一区二区在线 | 免费av在线网 | 久久久午夜视频 | 精品国产免费人成在线观看 | 久久黄色免费 | av在线永久免费观看 | 亚洲欧美精品一区 | 国产成人一区三区 | av超碰免费在线 | 国产日产精品一区二区三区四区的观看方式 | 欧美国产日韩在线观看 | 欧美日韩不卡在线观看 | 欧美性黄网官网 | 久久久免费毛片 | 免费在线观看不卡av | 久久99久久99免费视频 | 欧美一级久久久久 | 2022中文字幕在线观看 | 免费看片成年人 | 亚洲精品在线观看中文字幕 | 美女在线免费观看视频 | 免费a视频 | 日韩欧美精品一区二区 | 蜜臀一区二区三区精品免费视频 | 欧美精品一区二区免费 | 欧美综合在线视频 | 成人国产精品久久久久久亚洲 | 亚洲一级电影在线观看 | 日本久久久久久久久 | 毛片3| 久久区二区| 久久久在线观看 | 成人在线小视频 | 精品国产伦一区二区三区观看方式 | 国产亚洲午夜高清国产拍精品 | 国产福利精品在线观看 | 久久久国产精品人人片99精片欧美一 | 久久国产精品成人免费浪潮 | 亚洲日韩中文字幕在线播放 | 在线观看日韩 | 亚洲一级久久 | 国产一二区精品 | 97人人模人人爽人人喊网 | 久草视频在线免费看 | 久久久综合色 | 波多野结衣精品视频 | 丁香花在线视频观看免费 | 国产久视频 | 亚洲国产中文字幕 | 99视频精品全部免费 在线 | 欧美日韩高清免费 | 日韩理论| 三级a毛片 | 久久不卡av| 久久久精品午夜 | 亚洲精品在线一区二区 | 中文字幕超清在线免费 | 国产99久久久精品 | 久久久久久久久久电影 | 麻豆 videos | 五月婷婷欧美视频 | 国产又粗又猛又色又黄网站 | 97精品国产97久久久久久久久久久久 | 91精品视频播放 | 久久精品成人欧美大片古装 | 久久久国产精品网站 | 国产精品视频最多的网站 | 久久国产精品视频免费看 | 欧洲不卡av| 成人国产网址 | 天天综合网天天综合色 | 毛片基地黄久久久久久天堂 | 中文字幕大全 | 91精品久久久久久久99蜜桃 | 日韩高清免费电影 | 精品色999| 精品久久久久久久久久久久久久久久久久 | 日本动漫做毛片一区二区 | 99热这里有 | 亚洲国产精品999 | 日韩a在线看 | 欧美精品一区二区蜜臀亚洲 | 国产精品av电影 | 精品在线一区二区三区 | 久久久久久久久久久免费视频 | 免费人成在线观看网站 | 狠狠干夜夜操 | 亚洲天堂免费视频 | 日韩欧美精品免费 | 97超碰网| 国产在线一线 | 精品国产区在线 | 久久精品国产成人精品 | 色多多视频在线 | 免费麻豆 | 手机看国产毛片 | 国产区网址 | 国产字幕av | 五月婷婷在线视频 | 黄色网在线免费观看 | 国产一区二区三区四区大秀 | 深夜免费网站 | 国产精品一区二区久久精品爱涩 | 久久99精品久久久久久久久久久久 | 婷婷丁香激情 | 天天操天天色天天 | 国产精品美女久久久久aⅴ 干干夜夜 | 久草影视在线观看 | 亚洲高清网站 | 99精品视频在线观看 | 国产一区在线视频播放 | 欧美视频一区二 | 日韩有码在线观看视频 | 高清av中文在线字幕观看1 | 精品 一区 在线 | 国产成人91 | 国产精品麻豆三级一区视频 | 五月婷香蕉久色在线看 | 亚洲影视资源 | 99欧美精品| 国产亚洲精品久久久久久久久久 | 亚洲做受高潮欧美裸体 | 日韩高清免费在线 | 久久香蕉电影 | 午夜电影一区 | 最近中文国产在线视频 | 精品国产一区二区三区在线观看 | 亚洲欧美日韩国产一区二区三区 | 亚洲日本成人 | 中文字幕av免费 | 日韩精品一区二区在线观看视频 | 国产高清视频在线播放一区 | 黄网站免费大全入口 | 一区二区三区精品在线视频 | 亚洲国产免费网站 | 成人毛片100免费观看 | 99热99re6国产在线播放 | 日韩中文字幕视频在线观看 | 黄色电影在线免费观看 | 国产一级久久久 | 香蕉网在线观看 | 99超碰在线播放 | 91成人精品一区在线播放69 | 西西www4444大胆视频 | 一区二区三区在线看 | 国产精品美女 | 国产日韩在线播放 | 成人久久18免费网站 | 91精品在线观看视频 | 免费日韩一级片 | 久久夜色精品国产欧美乱极品 | 成人永久免费 | 国产精品私人影院 | 欧美日韩国产精品一区二区 | 久久久久久影视 | 天堂入口网站 | 麻花豆传媒一二三产区 | 一级a性色生活片久久毛片波多野 | 日本久久成人中文字幕电影 | 亚洲欧美国产精品 | 91免费高清观看 | 天天激情站 | 久久午夜影视 | 欧美日韩一区二区三区在线免费观看 | 在线观看av麻豆 | 久久久免费精品国产一区二区 | 日韩视频中文字幕 | 久久国产免费 | 久久国内视频 | 国产高清日韩欧美 | 亚洲视频大全 | 亚洲精品免费看 | 超碰免费成人 | 亚洲人成人99网站 | 国产精品精品久久久 | 成年人在线免费看 | 在线有码中文 | 成人黄色在线 | 欧美一级片在线免费观看 | 超碰午夜 | 91视频在线自拍 | 国产精品第52页 | 久久免费视频一区 | 久久精品高清 | 色综合天天综合网国产成人网 | 不卡的av在线播放 | 亚洲日韩中文字幕在线播放 | 亚洲一区在线看 | 日本激情中文字幕 | 欧美日韩久久久 | 人人添人人澡人人澡人人人爽 | 久久久久婷 | 日韩激情三级 | 91在线国产观看 | 在线免费看黄色 | 欧洲一区精品 | 欧美精品久久99 | 亚洲最大成人免费网站 | 天天天天色射综合 | 天天玩天天干 | 美国三级黄色大片 | 久久免费视频2 | 蜜臀av在线一区二区三区 | 久久久久久久久久久网 | 久久久免费精品 | 中文字幕在线观看网址 | 美女视频黄免费的久久 | 黄色av电影免费观看 | free. 性欧美.com| 精品一区二区三区在线播放 | 午夜在线免费视频 | 精品一区二区av | 日日弄天天弄美女bbbb | 欧美成人影音 | 中文字幕a∨在线乱码免费看 | 久久久精品国产一区二区电影四季 | 欧美性精品| av成人免费在线 | 久久综合九色综合久久久精品综合 | 国产精品综合在线 | 中文免费| 97在线免费视频 | 久操视频在线 | 欧美一级艳片视频免费观看 | 中文字幕在线视频第一页 | 亚洲aⅴ一区二区三区 | 久久色视频| 成人资源在线观看 | 国产精品白浆 | 亚洲精品裸体 | 亚洲欧美精品一区二区 | 六月婷婷久香在线视频 | 不卡电影一区二区三区 | 韩日在线一区 | 天堂网在线视频 | 亚洲国产精品成人女人久久 | 成人毛片100免费观看 | 国产精品成人av在线 | 96精品高清视频在线观看软件特色 | 色午夜影院| 国产精品久久久久久久久久99 | 国产福利91精品张津瑜 | 中文字幕中文字幕 | www久久精品| 亚洲综合国产精品 | 精品一区二区在线免费观看 | 色欧美日韩 | 天天射天天操天天色 | 亚洲国产三级在线观看 | 欧美极度另类性三渗透 | 五月婷婷在线综合 | 少妇bbw搡bbbb搡bbb | 亚洲最新av网站 | 久久久亚洲麻豆日韩精品一区三区 | 66av99精品福利视频在线 | 国产护士av | 欧美一级免费在线 | 久久久久美女 | 99热只有精品在线观看 | 99久久国产免费,99久久国产免费大片 | 在线免费看片 | 国产精品欧美精品 | 国产精品99久久久久久宅男 | 在线小视频你懂的 | av视屏在线| 免费观看一区 | 久久躁日日躁aaaaxxxx | 好看的国产精品视频 | 免费在线黄网 | 中文日韩在线视频 | 国产传媒中文字幕 | 欧美色综合久久 | 五月天狠狠操 | 四虎成人精品永久免费av | 在线播放亚洲激情 | 四虎成人精品在永久免费 | 国产在线视频一区二区 | 国产精品影音先锋 | 啪啪资源 | 中文字幕在线观看91 | 99免费在线播放99久久免费 | 日韩 精品 一区 国产 麻豆 | 日韩视频一区二区在线 | 在线播放 一区 | 久久这里| 一级黄色片在线播放 | 中文国产在线观看 | 亚洲最快最全在线视频 | 500部大龄熟乱视频 欧美日本三级 | 99婷婷狠狠成为人免费视频 | 亚洲国产丝袜在线观看 | 国产黄色a | 麻豆免费在线视频 | 美女久久久久久久久久久 | 色综合久久综合中文综合网 | 91女神的呻吟细腰翘臀美女 | 成人9ⅰ免费影视网站 | 欧美另类sm图片 | 日韩av一区二区三区在线观看 | 黄色性av| 99亚洲精品在线 | 99精品一区 | 天天操天天干天天综合网 | 嫩草91影院 | av在线免费在线观看 | 亚洲爱爱视频 | 国产精品一区二区美女视频免费看 | 91大神视频网站 | 日韩精品中文字幕在线播放 | 毛片精品免费在线观看 | 色999五月色 | 黄色激情网址 | 高清视频一区二区三区 | 99这里只有久久精品视频 | 亚洲,国产成人av | 免费福利在线播放 | 成人影片在线免费观看 | 国产一级视频在线 | 国产精品九九久久99视频 | 国产精品va在线 | 美女视频一区 | 日本美女xx | 五月开心六月婷婷 | 国产成人精品福利 | 波多野结衣在线播放一区 | 久久精品亚洲精品国产欧美 | 黄色a视频 | 成年人电影免费在线观看 | 精品亚洲视频在线 | 91亚洲狠狠婷婷综合久久久 | 99这里精品 | 美女网站黄在线观看 | 国产一区二区三区在线 | 久草在线视频看看 | 亚洲资源 | 尤物97国产精品久久精品国产 | 999视频在线播放 | 男女视频久久久 | 国产精品理论视频 | 成 人 黄 色 视频免费播放 | 久久精品99北条麻妃 | 久久草草热国产精品直播 | 亚洲影院国产 | 国产精品一区二区在线播放 | 国产精品伦一区二区三区视频 | 五月天激情婷婷 | 国内99视频 | 手机成人免费视频 | 久操视频在线播放 | 伊人色播| 久久天天躁狠狠躁亚洲综合公司 | 欧美日韩亚洲在线 | 久久免费国产 | 天天干天天操天天干 | 久草在线欧美 | 日韩精品短视频 | 黄色成人小视频 | 九色琪琪久久综合网天天 | 国产在线1区 | 国产成人精品一区二区三区福利 | 久久精品5| 日韩在线资源 | 在线 视频 亚洲 | 99久免费精品视频在线观看 | 日韩视频免费观看高清完整版在线 | 波多野结衣在线观看一区 | av观看免费在线 | 在线观看视频99 | 日韩精品久久久久久久电影99爱 | 中日韩三级视频 | 国产拍揄自揄精品视频麻豆 | 国产夫妻自拍av | www.伊人网.com | 国产精品一区二区三区在线播放 | 狠狠操综合 | 韩日av在线 | 欧美性生活小视频 | 91精品免费在线观看 | 国产一级二级在线播放 | 夜夜骑日日 | 91黄色影视 | 国内精品久久久久久中文字幕 | 国产精品精品久久久久久 | 久久国产网站 | 最近最新最好看中文视频 | 欧美一级片免费观看 | 亚洲波多野结衣 | 国产成人一区二区三区久久精品 | 亚洲成a人片在线观看网站口工 | 国产精品一区二区精品视频免费看 | 久久久久高清毛片一级 | 久久国产免费视频 | 亚洲精品免费在线播放 | 成人国产网址 | 九色视频网址 | 亚洲视频资源在线 | 国内精品视频在线播放 | 国产精品美女视频网站 | 九九热在线免费观看 | 亚洲天堂社区 | 精品国产乱码久久久久久天美 | 在线观看免费观看在线91 | 国产丝袜制服在线 | 色永久免费视频 | 国产黄色片久久 | 91大片网站 | 九九热精品国产 | 天天骚夜夜操 | 午夜视频在线观看一区二区 | 欧美日韩国产精品一区 | 久久综合九色99 | 亚洲波多野结衣 | 日本精品在线视频 | 日韩中文字幕第一页 | 中文国产在线观看 | 欧美日bb| 亚洲另类在线视频 | 精品国产中文字幕 | 国产高清不卡在线 | 成人免费xyz网站 | 91色亚洲| 久久激情综合网 | 69av视频在线 | 狠狠色香婷婷久久亚洲精品 | 亚洲国产精品女人久久久 | 精产嫩模国品一二三区 | 成人午夜精品福利免费 | 91av大全 | 午夜影院一区 | 亚洲九九爱 | 国产精品久久久久aaaa | 27xxoo无遮挡动态视频 | 九七视频在线观看 | 亚洲视频久久久久 | 国产99在线播放 | 91传媒在线观看 | 精品一区二区三区在线播放 | 黄色avwww | 国产精品 国产精品 | 人人视频网站 | 伊人久久五月天 | 91电影福利 | 久久视频精品在线观看 | 国产最新视频在线观看 | 中文字幕在线看视频 | www.天堂av| 亚洲免费观看视频 | 最新国产中文字幕 | 亚洲精品国产自产拍在线观看 | 久视频在线 | 毛片网站在线 | 丰满少妇久久久 | 天天干夜夜爽 | 成人在线播放av | 国产精品久久久久久久久久久免费 | 亚洲精品a区 | 天天天操操操 | 国产精品久久久久久久久久久久午夜片 | 在线视频 91 | 色综合欧洲 | 久久专区 | 久久久久久久久久久久亚洲 | 五月天综合激情 | 国产精品午夜久久 | 国产精品一区二区三区免费视频 | 在线视频欧美亚洲 | 在线免费色视频 | 黄色av播放| 久久久国产一区二区三区四区小说 | 综合激情网... | 日韩三级av | 日韩免费播放 | 成人av动漫在线观看 | 日韩av看片 | 久久精品视频免费播放 | 狠狠干网站 | 日韩精品在线看 | 亚洲视频,欧洲视频 | 久久久亚洲麻豆日韩精品一区三区 | 天天操天天干天天玩 | 日操操| 国产精品不卡 | 在线成人免费电影 | 超碰97.com | www.色爱| 久久成人麻豆午夜电影 | 国产区高清在线 | 在线中文字幕播放 | 色99视频| 狠狠操影视 | 超碰97免费观看 | 久久久一本精品99久久精品66 | av免费观看网站 | 91精品国自产在线观看 | 最近久乱中文字幕 | 天天综合网在线 | 狠狠综合网 | 成人宗合网 | 人人要人人澡人人爽人人dvd | 亚洲一级电影在线观看 | 午夜影院一级 | 亚洲精品一区中文字幕乱码 | 久久在线免费观看 | 在线日本看片免费人成视久网 | 国产区免费在线 | 一区二区视频电影在线观看 | 久久视频精品在线 | 久久97久久97精品免视看 | 国产精品手机视频 | 夜夜干天天操 | 亚洲视频综合 | 天天插天天爱 | 99视频在线 | 97操操操| av免费片 | 国产又粗又长又硬免费视频 | 992tv人人草 黄色国产区 | 玖玖玖影院 | 成人黄在线 | 国产免费嫩草影院 | 久久国产精彩视频 | 国产高清综合 | 免费欧美高清视频 | 国产黄在线| 欧美精品久久天天躁 | 亚洲综合色视频 | 精品国产精品国产偷麻豆 | 日韩免费视频网站 | 日韩av成人在线观看 | 久久久国产精品电影 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 久久婷婷一区 | 免费a级大片 | 五月天激情电影 | 在线天堂中文www视软件 | 国产精品久久久99 | 久久久久久久国产精品影院 | 国产精品日韩久久久久 | 久草资源在线观看 | 欧美成年网站 | 中文字幕精品www乱入免费视频 | 成人羞羞视频在线观看免费 | 亚洲乱码在线观看 | 久久综合免费视频 | 99久久精品国产一区二区成人 | 国产精品黄色av | 成人午夜电影久久影院 | 天天做综合网 | 国产精品自在线 | 国产成人免费观看久久久 | 国产一区二区在线看 | 亚洲最大成人网4388xx | 国产中文a | 成人蜜桃 | 久久久鲁 | 精品国产中文字幕 | 亚洲成人av免费 | 国产精品视频在线看 | 69av久久| 激情视频免费观看 | 亚洲精品美女久久17c | 人人搞人人干 | 伊人色**天天综合婷婷 | 日韩电影中文字幕在线观看 | 日韩a级黄色片 | 精久久久久 | 日韩精品免费在线 | 欧美在线观看视频免费 | 日韩av片无码一区二区不卡电影 | 亚洲女欲精品久久久久久久18 | 黄色成人91| 国产日韩高清在线 | 日韩精品久久中文字幕 | 亚洲激情久久 | 97在线观看免费 | 夜夜躁天天躁很躁波 | 高清国产午夜精品久久久久久 | 日本精品一区二区在线观看 | 91精品婷婷国产综合久久蝌蚪 | 亚洲精品美女在线观看播放 | 一区二区三区高清在线 | 精品一区 在线 | 狠日日| 天天干.com | 在线欧美日韩 | 在线观看日韩精品 | 亚洲乱码国产乱码精品天美传媒 | 精品国产伦一区二区三区观看体验 | 男女激情片在线观看 | 九色91视频| 国产亚洲精品综合一区91 | 欧美性黄网官网 | 天天干天天操天天做 | 黄免费在线观看 | 欧美一级黄色网 | 欧美一级免费在线 | 国产一区电影在线观看 | 五月天综合激情 | 看av免费 | 99久久精品国产观看 | 日本高清中文字幕有码在线 | 蜜臀av一区二区 | 在线精品亚洲一区二区 | 国产a国产a国产a | 国产成人一区二 | 五月婷综合 | 亚洲黄网站 | 国产一区私人高清影院 | 97视频人人免费看 | 在线黄色av | 国产大陆亚洲精品国产 | 99久精品 | av在线不卡观看 | 日日干干 | 欧美韩国日本在线观看 | 91香蕉视频黄 | 色婷在线 | 在线观看视频一区二区三区 | 久久男人中文字幕资源站 | 99超碰在线播放 | 日本激情视频中文字幕 | 成人动漫一区二区三区 | 亚洲欧美一区二区三区孕妇写真 | 国产精品久久久久久久久久免费 | 欧美日韩国产综合一区二区 | 中文字幕91视频 | 99久久99久久精品 | 中文字幕你懂的 | 久久综合偷偷噜噜噜色 | 色婷婷欧美 | 国产剧情一区二区 | 国产亚洲在 | 九九国产精品视频 | 免费一级特黄录像 | 欧美xxxxx在线视频 | 中文字幕视频一区二区 | 中文字幕视频一区 | 久久久久久久久久久久久久av | 激情小说网站亚洲综合网 | 欧美经典久久 | 国产精品theporn | 成人在线免费视频 | 国产视频精品免费播放 |