您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 >
Mock Objects:缺點(diǎn)和用例
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/27 14:03:44 ] 推薦標(biāo)簽:

摘要

  編寫單元測(cè)試代碼是一件很困難的工作。大多數(shù)情況下,我們需要測(cè)試那些以前沒有編寫過(guò)的使用復(fù)雜的協(xié)作軟件(如數(shù)據(jù)庫(kù),應(yīng)用程序服務(wù)器或軟件模塊)的代碼。我們可能還需要處理一些難以在測(cè)試環(huán)境下生成的條件。建立這些依賴關(guān)系可能需要相當(dāng)長(zhǎng)的時(shí)間,這抵消了其自動(dòng)測(cè)試方面的優(yōu)勢(shì)。本文將著重介紹Mock Objects――來(lái)自XP社區(qū)的一項(xiàng)測(cè)試技術(shù)(XP社區(qū)提供了一種獨(dú)立的代碼測(cè)試,這種測(cè)試是通過(guò)模擬外部依賴來(lái)實(shí)現(xiàn)的)。和使用任何其它工具一樣,我們要謹(jǐn)慎,防止濫用。
Mock Objects概述

  近些年來(lái),開發(fā)人員又重新發(fā)現(xiàn)了自己編寫測(cè)試代碼的好處。他們認(rèn)同,發(fā)現(xiàn)并修改軟件中的錯(cuò)誤所付出的代價(jià)是昂貴的。結(jié)果,Unit Testing作為查找代碼錯(cuò)誤和幫助確定系統(tǒng)需求的方法,成為了軟件開發(fā)流程中不可或缺的一部分。單元測(cè)試的主要目標(biāo)是獨(dú)立地對(duì)每一個(gè)工作單元(通常是一個(gè)類)進(jìn)行測(cè)試。獨(dú)立代碼測(cè)試是一件困難的工作,尤其是難以在測(cè)試中快速建立依賴關(guān)系的情況下。編寫和維護(hù)單元測(cè)試代碼的難度越大,開發(fā)人員越容易失去信心,并停止編寫測(cè)試代碼。

  Tim Mackinnon、Steve Freeman和Philip Craig在他們的文章“Endo-Testing: Unit Testing with Mock Objects”中對(duì)Mock對(duì)象的基本概念進(jìn)行了介紹,這篇文章發(fā)表在XP2000上。Mock對(duì)象(或Mock)模擬代價(jià)昂貴且難以使用的協(xié)作軟件,并提供了一種方法用于:

    在測(cè)試環(huán)境中建立復(fù)雜的依賴關(guān)系(例如,模擬數(shù)據(jù)庫(kù)連接,代替真正的數(shù)據(jù)庫(kù)連接)
    驗(yàn)證測(cè)試行為是否符合期望結(jié)果(例如,驗(yàn)證JDBC連接在使用結(jié)束后關(guān)閉――也是在特定時(shí)刻調(diào)用 java.sql.Connection中的 close方法)
    模擬難以生成的環(huán)境條件(例如,模擬JDBC驅(qū)動(dòng)程序拋出的 SQLException 類)。

  雖然很有用,但Mock并不是的,濫用Mock所帶來(lái)的壞處將會(huì)大于它為項(xiàng)目帶來(lái)的好處。
Mock的缺點(diǎn)

  Mock程序員需要注意以下幾個(gè)問(wèn)題。

Mock可能會(huì)隱藏集成問(wèn)題

  尤其是,如果我們只使用Mock進(jìn)行代碼測(cè)試,而不編寫集成測(cè)試,則這種情況很可能發(fā)生。

  請(qǐng)考慮圖1中的例子。

  圖1.將新員工信息存儲(chǔ)于數(shù)據(jù)庫(kù)中

  EmployeeBO類提供了與Employees有關(guān)的業(yè)務(wù)服務(wù),并使用EmployeeDAO通過(guò)JDBC將數(shù)據(jù)持久存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中。測(cè)試EmployeeBO意味著建立一個(gè)數(shù)據(jù)庫(kù),并用它來(lái)存儲(chǔ)數(shù)據(jù)。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd