国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 課堂 > 技術(shù)開發(fā) > 正文

全面介紹單元測試

2023-06-19 12:39:55
字體:
供稿:網(wǎng)友

本文寫于05年,是我關(guān)于單元測試的第一篇文章。讀者和轉(zhuǎn)載都很多,不過經(jīng)過更豐富的實踐尤其是涉及了不同企業(yè)的眾多項目的單元測試工作后,今天看來,文中的一些觀點是不正確的, 例如關(guān)于樁代碼的說法。近期我會多寫一些基于企業(yè)應(yīng)用的相關(guān)理論和方法介紹。這篇文章對于初學(xué)者理解單元測試還是不錯的。

一 單元測試概述

工廠在組裝一臺電視機(jī)之前,會對每個元件都進(jìn)行測試,這,就是單元測試。

其實我們每天都在做單元測試。你寫了一個函數(shù),除了極簡單的外,總是要執(zhí)行一下,看看功能是否正常,有時還要想辦法輸出些數(shù)據(jù),如彈出信息窗口什么的,這,也是單元測試,老納把這種單元測試稱為臨時單元測試。只進(jìn)行了臨時單元測試的軟件,針對代碼的測試很不完整,代碼覆蓋率要超過70%都很困難,未覆蓋的代碼可能遺留大量的細(xì)小的錯誤,這些錯誤還會互相影響,當(dāng)BUG暴露出來的時候難于調(diào)試,大幅度提高后期測試和維護(hù)成本,也降低了開發(fā)商的競爭力。可以說,進(jìn)行充分的單元測試,是提高軟件質(zhì)量,降低開發(fā)成本的必由之路。

對于程序員來說,如果養(yǎng)成了對自己寫的代碼進(jìn)行單元測試的習(xí)慣,不但可以寫出高質(zhì)量的代碼,而且還能提高編程水平。

要進(jìn)行充分的單元測試,應(yīng)專門編寫測試代碼,并與產(chǎn)品代碼隔離。老納認(rèn)為,比較簡單的辦法是為產(chǎn)品工程建立對應(yīng)的測試工程,為每個類建立對應(yīng)的測試類,為每個函數(shù)(很簡單的除外)建立測試函數(shù)。首先就幾個概念談?wù)劺霞{的看法。

一般認(rèn)為,在結(jié)構(gòu)化程序時代,單元測試所說的單元是指函數(shù),在當(dāng)今的面向?qū)ο髸r代,單元測試所說的單元是指類。以老納的實踐來看,以類作為測試單位,復(fù)雜度高,可操作性較差,因此仍然主張以函數(shù)作為單元測試的測試單位,但可以用一個測試類來組織某個類的所有測試函數(shù)。單元測試不應(yīng)過分強(qiáng)調(diào)面向?qū)ο螅驗榫植看a依然是結(jié)構(gòu)化的。單元測試的工作量較大,簡單實用高效才是硬道理。

有一種看法是,只測試類的接口(公有函數(shù)),不測試其他函數(shù),從面向?qū)ο蠼嵌葋砜矗_實有其道理,但是,測試的目的是找錯并最終排錯,因此,只要是包含錯誤的可能性較大的函數(shù)都要測試,跟函數(shù)是否私有沒有關(guān)系。對于C++來說,可以用一種簡單的方法區(qū)隔需測試的函數(shù):簡單的函數(shù)如數(shù)據(jù)讀寫函數(shù)的實現(xiàn)在頭文件中編寫(inline函數(shù)),所有在源文件編寫實現(xiàn)的函數(shù)都要進(jìn)行測試(構(gòu)造函數(shù)和析構(gòu)函數(shù)除外)。

什么時候測試?單元測試越早越好,早到什么程度?XP開發(fā)理論講究TDD,即測試驅(qū)動開發(fā),先編寫測試代碼,再進(jìn)行開發(fā)。在實際的工作中,可以不必過分強(qiáng)調(diào)先什么后什么,重要的是高效和感覺舒適。從老納的經(jīng)驗來看,先編寫產(chǎn)品函數(shù)的框架,然后編寫測試函數(shù),針對產(chǎn)品函數(shù)的功能編寫測試用例,然后編寫產(chǎn)品函數(shù)的代碼,每寫一個功能點都運行測試,隨時補(bǔ)充測試用例。所謂先編寫產(chǎn)品函數(shù)的框架,是指先編寫函數(shù)空的實現(xiàn),有返回值的隨便返回一個值,編譯通過后再編寫測試代碼,這時,函數(shù)名、參數(shù)表、返回類型都應(yīng)該確定下來了,所編寫的測試代碼以后需修改的可能性比較小。

由誰測試?單元測試與其他測試不同,單元測試可看作是編碼工作的一部分,應(yīng)該由程序員完成,也就是說,經(jīng)過了單元測試的代碼才是已完成的代碼,提交產(chǎn)品代碼時也要同時提交測試代碼。測試部門可以作一定程度的審核。

關(guān)于樁代碼,老納認(rèn)為,單元測試應(yīng)避免編寫樁代碼。樁代碼就是用來代替某些代碼的代碼,例如,產(chǎn)品函數(shù)或測試函數(shù)調(diào)用了一個未編寫的函數(shù),可以編寫樁函數(shù)來代替該被調(diào)用的函數(shù),樁代碼也用于實現(xiàn)測試隔離。采用由底向上的方式進(jìn)行開發(fā),底層的代碼先開發(fā)并先測試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測試上層函數(shù)時,也是對下層函數(shù)的間接測試;當(dāng)下層函數(shù)修改時,通過回歸測試可以確認(rèn)修改是否導(dǎo)致上層函數(shù)產(chǎn)生錯誤。

二 測試代碼編寫

多數(shù)講述單元測試的文章都是以Java為例,本文以C++為例,后半部分所介紹的單元測試工具也只介紹C++單元測試工具。下面的示例代碼的開發(fā)環(huán)境是VC6.0。

產(chǎn)品類:

 class CMyClass
  {
  public:
      int Add(int i, int j);
      CMyClass();
      virtual ~CMyClass();

private:
      int mAge; //年齡
      CString mPhase; //年齡階段,如"少年","青年"
  };

建立對應(yīng)的測試類CMyClassTester,為了節(jié)約編幅,只列出源文件的代碼:
  void CMyClassTester::CaseBegin()
  {
      //pObj是CMyClassTester類的成員變量,是被測試類的對象的指針,
      //為求簡單,所有的測試類都可以用pObj命名被測試對象的指針。

     pObj = new CMyClass();
  }

void CMyClassTester::CaseEnd()
  {
      delete pObj;
  }

測試類的函數(shù)CaseBegin()和CaseEnd()建立和銷毀被測試對象,每個測試用例的開頭都要調(diào)用CaseBegin(),結(jié)尾都要調(diào)用CaseEnd()。

接下來,我們建立示例的產(chǎn)品函數(shù):

int CMyClass::Add(int i, int j)
  {
      return i+j;
  }

和對應(yīng)的測試函數(shù):

void CMyClassTester::Add_int_int()
  {
  }

把參數(shù)表作為函數(shù)名的一部分,這樣當(dāng)出現(xiàn)重載的被測試函數(shù)時,測試函數(shù)不會產(chǎn)生命名沖突。下面添加測試用例:

void CMyClassTester::Add_int_int()
  {
      //第一個測試用例
      CaseBegin();{ //1
      int i = 0; //2
      int j = 0; //3
      int ret = pObj->Add(i, j); //4
      ASSERT(ret == 0); //5
      }CaseEnd(); //6
  }

第1和第6行建立和銷毀被測試對象,所加的{}是為了讓每個測試用例的代碼有一個獨立的域,以便多個測試用例使用相同的變量名。

第2和第3行是定義輸入數(shù)據(jù),第4行是調(diào)用被測試函數(shù),這些容易理解,不作進(jìn)一步解釋。第5行是預(yù)期輸出,它的特點是當(dāng)實際輸出與預(yù)期輸出不同時自動報錯,ASSERT是VC的斷言宏,也可以使用其他類似功能的宏,使用測試工具進(jìn)行單元測試時,可以使用該工具定義的斷言宏。

示例中的格式顯得很不簡潔,2、3、4、5行可以合寫為一行:ASSERT(pObj->Add(0, 0) == 0);但這種不簡潔的格式卻是老納極力推薦的,因為它一目了然,易于建立多個測試用例,并且具有很好的適應(yīng)性,同時,也是極佳的代碼文檔,總之,老納建議:輸入數(shù)據(jù)和預(yù)期輸出要自成一塊。

建立了第一個測試用例后,應(yīng)編譯并運行測試,以排除語法錯誤,然后,使用拷貝/修改的辦法建立其他測試用例。由于各個測試用例之間的差別往往很小,通常只需修改一兩個數(shù)據(jù),拷貝/修改是建立多個測試用例的最快捷辦法。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
热99re久久精品精品免费| 精品极品三级久久久久| 2019年中文字幕| 国内自拍视频在线看免费观看| 久草福利资源在线视频| 在线免费看黄| 天天草天天操| 天堂在线看视频| 最近中文字幕mv2018在线高清| 国产网站在线免费观看| 99在线免费观看| 九九免费视频| 69日小视频在线观看| a视频免费看| 天天av天天爱| 91sp网站在线观看入口| 国产对白国语对白| 亚洲网站一区| 天天av综合网| 香蕉视频网站在线播放| 最好2018中文免费视频| 亚洲视频在线网| 国产精品人人| 中文字幕日本三级| www.av在线视频| 在线一二三区| 国产成人综合亚洲欧美在| 麻豆精品不卡国产免费看| 国产欧美一区二区三区小说| 亚洲网站一区| 国产调教视频在线观看| 亚洲日本伊人| 国产成在线观看免费视频| 午夜视频在线看| 蜜桃视频网站在线| 四虎精品成人a在线观看| 国产日韩欧美精品一区二区三区| 麻豆视频在线观看免费网站| 在线视频婷婷| av在线1区2区| 亚洲激情丁香| 亚洲电影先锋| 亚洲欧美自拍另类| 在线国产91| av在线免费播放| 99reav| 精品一区二区观看| 国产激情视频在线观看| 国产激情在线| 在线三级av| 精品精品导航| 亚洲精品xxxxx| 免费精品国产自产拍观看| 欧美国产中文| 国产原创在线播放| 国产乱妇乱子| 国产福利一区二区在线精品| 国产超碰在线| 亚洲v片在线观看| 国产中文字幕在线| 国产女王在线**视频| 国产精品扒开做爽爽爽的视频 | 国产高清自拍视频在线观看| 国产精品久久久久白浆| 在线中文字幕观看| 九色福利视频| 精品视频vs精品视频| 日p在线观看| 国产网站av| 午夜小视频在线| 国产一级网站视频在线| 91xx在线观看| 九九热在线视频观看| 国产精品yjizz视频网一二区 | 久久五月精品| 国产福利在线视频| 国产综合视频一区二区三区免费| 69久久久久| 天堂资源在线中文| 亚洲精品自拍区在线观看| 成人午夜无人区一区二区| 国产福利在线| 91sp网站在线观看入口| 四虎www视频| 国产成+人+亚洲+欧美+综合| 久久国产热视频| 一本久中文高清| 中文字幕日本在线观看| 影音av资源站| 国产精品久久久久一区二区国产 | 午夜视频在线观看网站午夜视频在线| 国产对白在线| 国产二区三区四区| 高潮白浆视频| 亚洲欧美自拍另类| 国产二级片在线| 国产视频青青| 国产精品一区在线看| 青草青在线视频| 色欧美在线观看| 精品久久九九| 99re在线视频播放| av大片在线播放| 国产黄在线观看| 午夜国产视频| 91av久久| 国产小视频福利在线| 国产乱视频在线观看播放| 国内自拍视频在线看免费观看| 黄色av网站在线免费观看| 午夜在线视频| 福利视频网址导航| 免费观看一二区视频网站| 高清av中文在线字幕观看1| 麻豆精品不卡国产免费看| 免费a级毛片在线观看| 好男人社区在线视频| 国产桃色电影在线播放| 国产福利电影在线| 四虎影视成人永久免费观看视频| 日本高清中文字幕| 88av在线| 在线观看av中文| 久久国产精品黑丝| 国产视频精选在线| 在线观看中文字幕一区| 开心婷婷激情五月| 国产另类图片| 99在线免费视频| 天堂在线中文| 亚洲大香人伊一本线| 中中文字幕av在线| 在线免费国产视频| 国产一级片麻豆| gogo在线高清视频| 最好看更新中文字幕| 亚洲精品天堂在线观看| 国产一起色一起爱| 免费国产视频| 亚洲www色| 国产激情99| 国产在线观看av| 97视频免费| 国产中文字幕网| www.狠狠操.com| 91欧美在线视频| 国产麻豆精品视频一区二区| av在线不卡免费| 精品美女调教视频| 中文字幕高清av | 欧美日韩在线中文字幕| 99久久国产视频| 国产jizz| 2020国产在线视频| 国产二区在线播放| 国产精品免费麻豆入口| 另类视频在线| 免费特级黄毛片| www.成人.com| 青青草视频在线免费观看| 中中文字幕av在线| 精品176二区| 2021av天天| 国产色在线播放| 丁香花视频在线观看| 成网站在线观看人免费| 国产在线观看a| 九九在线视频| 导航福利在线| 国产黄色在线看| 日本福利午夜视频在线| 国产视频xxxx| 国产精品爱久久久久久久小说| 国产一卡2卡3卡免费网站| 国产视频二区在线观看| 国产精品白浆流出视频| 国产不卡在线| 影音av资源站| 欧美日韩在线精品成人综合网| 人人九九精品| 午夜av电影| 精品国产福利一区二区在线| 日本在线观看| 大香伊人久久| 在线午夜视频| 国产毛片视频| 国产在线麻豆精品| 九九热在线观看 | 国产精品美女一区二区三区四区| 国产三级在线| 色中文字幕在线| 国产美女视频网站| 国产变态拳头交视频一区二区| 免费电影网站在线视频观看福利| 国产一级二级在线| www.综合网.com| 99在线免费视频| 国产视频精品久久| 九九99九九精彩| 国产深夜视频在线观看|