W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
Gerard Meszaros 在 [Meszaros2007] 中介紹了測試替身的概念:
有時(shí)候?qū)Ρ粶y系統(tǒng)(SUT)進(jìn)行測試是很困難的,因?yàn)樗蕾囉谄渌麩o法在測試環(huán)境中使用的組件。這有可能是因?yàn)檫@些組件不可用,它們不會返回測試所需要的結(jié)果,或者執(zhí)行它們會有不良副作用。在其他情況下,我們的測試策略要求對被測系統(tǒng)的內(nèi)部行為有更多控制或更多可見性。
如果在編寫測試時(shí)無法使用(或選擇不使用)實(shí)際的依賴組件(DOC),可以用測試替身來代替。測試替身不需要和真正的依賴組件有完全一樣的的行為方式;他只需要提供和真正的組件同樣的 API 即可,這樣被測系統(tǒng)就會以為它是真正的組件!
--Gerard Meszaros
PHPUnit 提供的 getMockBuilder($type)
方法可以在測試中用來自動生成對象,此對象可以充當(dāng)任意指定原版類型(接口或類名)的測試替身。在任何預(yù)期或要求使用原版類的實(shí)例對象的上下文中都可以使用這個(gè)測試替身對象來代替。
在默認(rèn)情況下,原版類的所有方法都會被替換為只會返回 null
的偽實(shí)現(xiàn)(其中不會調(diào)用原版方法)。使用諸如 will($this->returnValue())
之類的方法可以對這些偽實(shí)現(xiàn)在被調(diào)用時(shí)應(yīng)當(dāng)返回什么值做出配置。
請注意,final
、private
和 static
方法無法對其進(jìn)行上樁(stub)或模仿(mock)。PHPUnit 的測試替身功能將會忽略它們,并維持它們的原始行為。
請關(guān)注一下這個(gè)事實(shí):參數(shù)管理方式已經(jīng)修改過了。在之前的實(shí)現(xiàn)中,將會克隆對象的所有參數(shù)。這樣就無法檢查傳遞給方法的是否是同一個(gè)對象。Example?9.15, “測試某個(gè)方法將會被調(diào)用一次,并且以某個(gè)特定對象作為參數(shù)。” 展示了新的實(shí)現(xiàn)方式在什么情況下會非常有用。Example?9.16, “創(chuàng)建仿件對象時(shí)啟用參數(shù)克隆”展示了如何切換回之前的行為方式。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: