<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      系列目錄 <https://www.cnblogs.com/tylerzhou/p/11386635.html>

      autofixture簡(jiǎn)介


      有了單元測(cè)試框架加上Moq(后面我們會(huì)用單獨(dú)章節(jié)來(lái)介紹moq),可以說(shuō)測(cè)試問題基上都能搞定了.然而有了AutoFixture對(duì)單元測(cè)試來(lái)說(shuō)可以說(shuō)是如虎添翼,AutoFixture并且它能與moq,rhinomock等框架結(jié)合,對(duì)單元測(cè)試帶來(lái)的便捷性,可維護(hù)性和擴(kuò)展性更是難以言表,只有用用了才知道.

      說(shuō)了這么多,還沒有介紹AutoFixture是干什么的,其實(shí)AutoFixture就是一個(gè)假數(shù)據(jù)填充工具.

      其實(shí)不論是Nunit還是Xunit都有數(shù)據(jù)填充功能,并且大部分時(shí)候都能滿足需求.然而通過(guò)我們前面的介紹就會(huì)知道有以下問題:

      * 不論是vlues注解還是TestCase注解都沒有類型約束,這就可能會(huì)造成運(yùn)行時(shí)錯(cuò)誤.
      * 基于注解的值都只能是Const值,如果需要復(fù)雜類型就需要定義一個(gè)類型做為Source為當(dāng)前操作提供值.
      *
      與Nunit和Xunit生成的填充數(shù)據(jù)相比,Autofixture可以生成符合驗(yàn)證規(guī)則的數(shù)據(jù)(基于system.componentmodel.annotations名稱空間下的注解約束),這在集成測(cè)試?yán)飵椭艽?對(duì)于有著非常復(fù)雜模型驗(yàn)證的接口來(lái)說(shuō),手工制造出符合模型驗(yàn)證規(guī)則的數(shù)據(jù)往往是非常痛苦的.
      * Autofixture可以生成一組符合驗(yàn)證規(guī)則的數(shù)據(jù),這樣在測(cè)試的時(shí)候增加了樣本數(shù)據(jù)的隨機(jī)性,大大提升了測(cè)試的覆蓋面.
      Moq測(cè)試雖然極大方便了測(cè)試,但是也會(huì)有一些問題:

      *

      對(duì)于比較復(fù)雜的web項(xiàng)目,往往一個(gè)業(yè)務(wù)邏輯可能要消費(fèi)十個(gè)幾個(gè)甚至幾十個(gè)數(shù)據(jù)接口,如果業(yè)務(wù)不是很成熟可能需要不斷的來(lái)調(diào)整這些接口,這里的修改同時(shí)單元測(cè)試方法也需要修改(因?yàn)檫@些接口多數(shù)時(shí)候是通過(guò)構(gòu)造函數(shù)注入的,構(gòu)造函數(shù)參數(shù)數(shù)量的變動(dòng)會(huì)導(dǎo)致調(diào)用者也需要做相應(yīng)調(diào)整)

      *
      雖然Moq也能夠模擬類對(duì)象,但是限制非常多,我們不可能為了測(cè)試把所有的方法和屬性都加上abstract或者virtual.

      而autofixture則可以很好的解決這些問題.這樣極大增加代碼的可維護(hù)性和擴(kuò)展性.

      AutoFixture并不是對(duì)moq的替代,它只能填充對(duì)象,而不能模擬對(duì)象,但是它可以與moq框架結(jié)合實(shí)現(xiàn)更強(qiáng)大的功能.

      autofixture安裝

      autofixture安裝非常簡(jiǎn)單,我們?cè)贜uget里搜索autofixture,第一個(gè)就是它點(diǎn)擊安裝即可.

      關(guān)于autofixture與moq結(jié)合需要的包在后面講到的時(shí)候再安裝,這里先略過(guò).

      AutoFixture 自動(dòng)為Nunit填充數(shù)據(jù)

      要使AutoFixture與Nunit結(jié)合,首先我們需要安裝特定的包.

      在Nuget里輸入AutoFixture.Nunit3,會(huì)出現(xiàn)以下選項(xiàng)

      由于我們使用的是Nunit3,因此我們選擇第一個(gè)安裝.


      AutoFixture還可以與Xunit結(jié)合.在Nuget里搜索AutoFixture.xunit2便可以搜索到AutoFixture與Xunit結(jié)合的框架.與Xunit結(jié)果的用法與Nunit差不多,只是需要注意Xunit數(shù)據(jù)測(cè)試方法需要Theory注解.

      我們新建一個(gè)名為FixtureTest并引入AutoFixture.NUnit3;名稱空間

      代碼如下
      [TestFixture] public class FixtureTest { [Test] [AutoData] public void
      FixValueTest(int a, int b) { var result = Add(a , b); Assert.AreEqual(a + b,
      result); } int Add(int x, int y) { return x + y; } }
      這里與平時(shí)的單元測(cè)試相比,多了一個(gè)AutoData注解,有了AutoData注解,AutoFixture便可以給當(dāng)前測(cè)試提供值了.
      我們斷點(diǎn)調(diào)試一下看看a和b的值



      我們可以看到a和b都被賦予了隨機(jī)的值.

      我們把測(cè)試代碼改為如下
      [Test] [AutoData] public void FixValueTest(Person p1, Person p2) { var result
      = Add(p1.Age , p2.Age); Assert.AreEqual(p1.Age + p2.Age, result); }
      我們?cè)贁帱c(diǎn)調(diào)試一下看看是否有值


      復(fù)雜對(duì)象它也能填充!這樣就免去了為了使用復(fù)雜對(duì)象需要額外寫很多source繁瑣.

      我們把代碼改成如下
      [Test] [AutoData] public void FixValueTest(IEnumerable<Person> people) { var
      ages = people.Sum(a => a.Age); }
      我們看看此時(shí)會(huì)有什么結(jié)果


      通過(guò)監(jiān)視容器可以看到,AutoFixture生成了一個(gè)包含三個(gè)元素的對(duì)象.


      這簡(jiǎn)直是太方便了,autofixture自動(dòng)填充值不但減少了運(yùn)行時(shí)可能的類型錯(cuò)誤,還有極大的擴(kuò)展性,如果我們?cè)跍y(cè)試方法上添加其它參數(shù),它仍然能夠自動(dòng)填充.而使用Nunit自身帶的TestCase如果參數(shù)減少,里面指定的值也要減少,否則會(huì)拋出運(yùn)行時(shí)異常.


      通過(guò)以上我們可以看到,AutoFixture可以生成各種類型的對(duì)象,它可以創(chuàng)建集合對(duì)象對(duì)我們測(cè)試來(lái)說(shuō)尤其有用,免去了手動(dòng)創(chuàng)建的麻煩.但是我們同時(shí)也看到,基于注解的方法生成集合時(shí)只生成了三個(gè),實(shí)際上要模擬數(shù)據(jù)庫(kù)是的數(shù)據(jù)測(cè)試一些行為我們可能需要更多的元素.這里就需要對(duì)AutoFixture本身進(jìn)行配置.這是基于注解的方法無(wú)法完成的.

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          色婷婷AV在线 | 日本高潮视频 | 欧美日韩在线一级黄色电影 | 国产性AV | 国产精品久久久久久久久潘金莲 | 操嫩逼视频 | 台湾无码一区二区三区 | 性非洲婬妇A片AAA毛片小说 | 无码中文字幕一区二区免费蜜桃 | 豆花视频成人版 |