<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java, Only Java!

    統(tǒng)計(jì)

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評(píng)論排行榜

    《單元測(cè)試之道Java版》的讀書(shū)筆記

  • 總覽
  • 第2章 首個(gè)單元測(cè)試
  • 第3章 使用JUnit編寫(xiě)測(cè)試
  • 4. 測(cè)試什么?
  • 5.CORRECT(正確的)邊界條件
  • 6.使用Mock對(duì)象
  • 7. 好的測(cè)試所具有的品質(zhì)(A-TRIP)
  • 8. 在項(xiàng)目中進(jìn)行測(cè)試
  • 9. 設(shè)計(jì)話題

      總覽

      這是本相對(duì)簡(jiǎn)單的書(shū),書(shū)中采用的JUnit的版本也是舊的,但是在新的JUnit4下稍做修改依然可以運(yùn)行。重要的是通過(guò)這本書(shū)了解JUnit在Java的單元測(cè)試中是如何使用的。

      第2章 首個(gè)單元測(cè)試

      計(jì)劃你的測(cè)試:測(cè)試不是無(wú)中生有的,也不是意想天開(kāi)的。是根據(jù)需要一點(diǎn)點(diǎn)添加的,幫助自己盡早地發(fā)現(xiàn)思考上的誤區(qū)。參看這章給出的例子,原來(lái)理所當(dāng)然正確的,結(jié)果不一定是正確的。

      第3章 使用JUnit編寫(xiě)測(cè)試

      3.1 構(gòu)建單元測(cè)試

      測(cè)試代碼必須要做的幾件事情:

      • 準(zhǔn)備測(cè)試的條件(創(chuàng)建對(duì)象、分配資源等等)
      • 調(diào)用測(cè)試的方法
      • 驗(yàn)證測(cè)試方法的行為與期望是否相符
      • 測(cè)試結(jié)束后清理現(xiàn)場(chǎng)(釋放資源等等)

        3.2 JUnit的各種斷言

        斷言:JUnit提供的輔助函數(shù),幫助你確認(rèn)被測(cè)試函數(shù)是否正確運(yùn)行。

      后面還介紹了(3.5 JUnit的自定義斷言)

      3.3 JUnit框架

      這章是基于JUnit3.x寫(xiě)的,建議了解就可以了,因?yàn)镴Unit4的變化較大,使用也更方便直觀,因此直接參考JUnit4的幫助

      框架運(yùn)行順序 對(duì)應(yīng)于標(biāo)簽
      setUpBeforeClass() @BeforeClass
         
      setUp() @Beofre
      testMethod1()  
      tearDown() @After
         
      setUp() @Before
      testMethod2()  
      tearDown() @After
         
      tearDownAfterClass() @AfterClass

      4. 測(cè)試什么?

      6個(gè)需要測(cè)試的地方(Right-BICEP):

      • Right:結(jié)果是否正確(Right);
      • B:邊界(Boundary)條件是否正確(CORRECT);參考第5章
      • I:能否檢查反向(Inverse)關(guān)系;
      • C:進(jìn)行交叉檢查(Cross-Check)的其他手段;
      • E:強(qiáng)制錯(cuò)誤(Error)條件發(fā)生;使用Mock對(duì)象實(shí)現(xiàn),參考第6章
      • P:滿足性能(Performance)的要求。

      測(cè)試內(nèi)容較多時(shí),可以使用測(cè)試數(shù)據(jù)文件進(jìn)行準(zhǔn)備。但是使用文件后就沒(méi)有測(cè)試代碼看起來(lái)那么直觀了,因此除非測(cè)試內(nèi)容非常復(fù)雜,否則沒(méi)有必要采用這樣的方式。并且如果測(cè)試文件出現(xiàn)錯(cuò)誤(作者書(shū)中就出現(xiàn)了數(shù)據(jù)錯(cuò)誤),還會(huì)導(dǎo)致測(cè)試不通過(guò),增加了維護(hù)的成本。

      5.CORRECT(正確的)邊界條件

      • 一致性(Conformance):值是否符合預(yù)期的格式;
      • 有序性(Ordering):一組值是否符合對(duì)排序的要求(有序性、無(wú)序性);
      • 區(qū)間性(Range):值是否在合理取值范圍內(nèi)(在最小值與最大值之間);
      • 引用(Reference)-耦合性:代碼是否引用了不受代碼本身直接控制的外部因素;
      • 存在性(Existence):值是否存在(例如:非NULL,非零,包含于某個(gè)集合等等)
      • 基數(shù)性(Cardinality):是否恰好有足夠的值;(也稱為集合的勢(shì),即集合里面包含的元素個(gè)數(shù))
      • 時(shí)間性(Time)-絕對(duì)時(shí)間和相對(duì)時(shí)間:所有的事情是否按照順序發(fā)生?是否在正確的時(shí)間發(fā)生?是否及時(shí)發(fā)生?

      6.使用Mock對(duì)象

      Mock對(duì)象解決的問(wèn)題:

      • 真實(shí)對(duì)象具有不可確定的行為(如:股票行情);
      • 真實(shí)對(duì)象很難被創(chuàng)建;
      • 真實(shí)對(duì)象的某些行為很難被觸發(fā)(如:網(wǎng)絡(luò)錯(cuò)誤);
      • 真實(shí)對(duì)象令程序的運(yùn)行速度很慢;
      • 真實(shí)對(duì)象有用戶界面或者就是用戶界面;
      • 真實(shí)對(duì)象需要被詢問(wèn)它是如何被調(diào)用的(如:驗(yàn)證某個(gè)回調(diào)函數(shù)是否被調(diào)用);
      • 真實(shí)對(duì)象實(shí)際上不存在(如:其他開(kāi)發(fā)小組的接口、或者某個(gè)沒(méi)有的硬件產(chǎn)品)。

      Mock對(duì)象解決的步驟:

      • 使用一個(gè)接口來(lái)描述這個(gè)對(duì)象;
      • 為產(chǎn)品代碼實(shí)現(xiàn)這個(gè)接口;
      • 以測(cè)試為目的,在Mock對(duì)象中實(shí)現(xiàn)這個(gè)接口。

      注:這里的Mock不是網(wǎng)上已經(jīng)形成框架的Mock工具,是Mock的實(shí)現(xiàn)原理。作者推薦的Mock工具是EasyMock。其他的Mock工具可以參考《[使用Mock進(jìn)行單元測(cè)試]》(https://blog.csdn.net/u011393781/article/details/52669772)

      7. 好的測(cè)試所具有的品質(zhì)(A-TRIP)

      • 自動(dòng)化(Automatic):自動(dòng)化地調(diào)用測(cè)試和檢查結(jié)果;常用的持續(xù)集成工具
      • 徹底的(Thorough):測(cè)試了所有需求關(guān)注的情況;常用的代碼覆蓋工具
      • 可重復(fù)(Repeatable):每個(gè)測(cè)試應(yīng)該獨(dú)立于其他所有的測(cè)試,還必須獨(dú)立于環(huán)境,從而可以重復(fù)地執(zhí)行,并且產(chǎn)生相同的結(jié)果。
      • 獨(dú)立的(Independent):確保一個(gè)函數(shù)只針對(duì)一樣測(cè)試,并且這個(gè)測(cè)試不依賴于其他測(cè)試。
      • 專業(yè)的(Professional):測(cè)試代碼應(yīng)該與產(chǎn)品代碼的編碼風(fēng)格和編寫(xiě)質(zhì)量相同

      如何確保測(cè)試代碼是正確的呢?

      • 對(duì)產(chǎn)品代碼中的Bug進(jìn)行修改的時(shí)候也改進(jìn)測(cè)試代碼;(因?yàn)檫@個(gè)Bug是測(cè)試代碼沒(méi)有發(fā)現(xiàn)的)
      • 在產(chǎn)品代碼中引入Bug來(lái)驗(yàn)證測(cè)試代碼的正確性。(確保可能會(huì)發(fā)生的錯(cuò)誤被測(cè)試代碼捕捉到了)

      8. 在項(xiàng)目中進(jìn)行測(cè)試

      • 把測(cè)試代碼與產(chǎn)品代碼放在一個(gè)目錄下;
      • 與別人共享代碼的時(shí)候,需要確保你的代碼可以通過(guò)所有測(cè)試;
      • 測(cè)試的時(shí)間點(diǎn):
        • 編寫(xiě)新的函數(shù);
        • 修正Bug;
        • 每次成功編譯之后;
        • 每次對(duì)版本控制的提交;
        • 持續(xù)不斷地由專門(mén)的機(jī)器來(lái)運(yùn)行完整的構(gòu)建和測(cè)試。
      • 測(cè)試別人的項(xiàng)目代碼:其實(shí)就是維護(hù)別人的項(xiàng)目絕對(duì)是個(gè)大問(wèn)題,同時(shí)也是個(gè)必須面對(duì)的問(wèn)題。需要理性的態(tài)度(不批評(píng)別人的代碼)、冷靜的手段(不隨便修改別人的代碼)、持久的耐心(先從測(cè)試代碼開(kāi)始,慢慢重構(gòu)項(xiàng)目代碼,使之重新回到健康狀態(tài))、真正的智慧(知道什么樣的項(xiàng)目應(yīng)該達(dá)到什么樣的目標(biāo),不執(zhí)著于重構(gòu)成一個(gè)完美的狀態(tài),也不簡(jiǎn)單放棄隨之自生自滅。)
      • 測(cè)試與評(píng)審:三個(gè)臭皮匠頂個(gè)諸葛亮,放下自我的執(zhí)著,接納各種不同的意見(jiàn),才能做出令自己滿意的項(xiàng)目。

      9. 設(shè)計(jì)話題

      • 面向測(cè)試的設(shè)計(jì):不方便測(cè)試的設(shè)計(jì)不是好的設(shè)計(jì);說(shuō)明設(shè)計(jì)過(guò)于僵化或者臃腫,需要簡(jiǎn)化或者修改使之更利用未來(lái)的擴(kuò)展和維護(hù)。
      • 面向測(cè)試的重構(gòu):不方便測(cè)試的代碼不是好的代碼;說(shuō)明業(yè)務(wù)混雜在一起,無(wú)法實(shí)現(xiàn)一個(gè)函數(shù)只針對(duì)一樣測(cè)試,需要修改設(shè)計(jì)使業(yè)務(wù)分離。
      • 測(cè)試類的不變性:就是對(duì)類的斷言必須為真。
        • 有序性。例如:sorted list類的不變性就是無(wú)論發(fā)生什么,結(jié)果都應(yīng)該是有序的。
        • 結(jié)構(gòu)化。例如:訂單系統(tǒng)中每個(gè)條目必須屬于一個(gè)訂單,一個(gè)訂單擁有一個(gè)或多個(gè)條目。
        • 數(shù)學(xué)不變性。例如:銀行賬號(hào)的的借貸必須平衡。
        • 數(shù)據(jù)一致性。例如:商品總數(shù)=庫(kù)存數(shù)+銷售數(shù)。
      • 測(cè)試驅(qū)動(dòng)的設(shè)計(jì)。使你作為產(chǎn)品代碼的用戶在編碼,而不是產(chǎn)品開(kāi)發(fā)者在編碼,開(kāi)發(fā)結(jié)果更能反應(yīng)用戶的需求。
      • 測(cè)試無(wú)效的參數(shù)。當(dāng)你作為產(chǎn)品代碼的用戶時(shí),你才能真正確定哪些責(zé)任應(yīng)該你來(lái)承擔(dān),而哪些是不需要的。例如:無(wú)效的參數(shù)應(yīng)該由哪個(gè)函數(shù)來(lái)承擔(dān)檢查責(zé)任呢?
    • posted on 2019-01-16 17:57 zYx.Tom 閱讀(200) 評(píng)論(0)  編輯  收藏 所屬分類: 7.學(xué)習(xí)日志

      主站蜘蛛池模板: 人妻仑乱A级毛片免费看| 亚洲av午夜成人片精品电影| 国产精品黄页免费高清在线观看| 亚洲午夜无码久久| 亚洲男人都懂得羞羞网站| 亚洲人成国产精品无码| 亚洲日韩精品无码AV海量| 亚洲一区精品中文字幕| 亚洲成色WWW久久网站| 亚洲国产成人影院播放| 国产在线ts人妖免费视频| 黄瓜视频影院在线观看免费| 日韩精品久久久久久免费| 成人无码区免费A∨直播| 国产亚洲欧美在线观看| 亚洲日韩一中文字暮| 亚洲冬月枫中文字幕在线看| 国产免费久久精品| 无人在线观看完整免费版视频| 日韩视频在线观看免费| a国产成人免费视频| 两性色午夜视频免费网| 亚洲免费在线观看| 特色特黄a毛片高清免费观看| 特级毛片A级毛片100免费播放| 亚洲AV无码成人精品区狼人影院| 亚洲精品无码久久久久A片苍井空| 亚洲一本之道高清乱码| 亚洲一线产区二线产区精华| 亚洲国产情侣一区二区三区| 久久精品国产亚洲AV无码偷窥| 亚洲激情中文字幕| 久久久久亚洲AV无码永不| 精品亚洲成a人片在线观看| 亚洲天堂一区二区| 亚洲国产日韩在线成人蜜芽| 亚洲国产亚洲综合在线尤物| 亚洲最大成人网色香蕉| 亚洲真人无码永久在线观看| 亚洲avav天堂av在线网毛片| 立即播放免费毛片一级|