[size=large]php單元測試進階(13)- 核心技術 - mock對象 - 同時使用mock和stub[/size]
本系列文章主要代碼與文字來源于《單元測試的藝術》,原作者:Roy Osherove。譯者:金迎。
本系列文章根據php的文法與使用習慣做了改編。所有代碼在本機測試通過。如轉載請注明出處。
假設需求變更,更加複雜一些。
如檔案名過短,則web服務記錄日志,但萬一記錄過程中發生異常,需發送一封郵件。
要求測試發送郵件是成功的。
源代碼有2個接口,一個被測類。
測試代碼有2個僞對象類,一個測試類。
[size=large]源代碼[/size]
(1)\t2\application\index\controller下,錯誤日志接口
IWebService.php
(2)\t2\application\index\controller下,郵件接口
IEmailService.php
(3)被測類,實作萬一抛異常,就發郵件這個功能。\t2\application\index\controller下,
LogAnalyzer.php
[size=large]測試代碼[/size]
(4)\t2\tests\index\controller下,實作錯誤日志接口的樁件類
FakeWebService.php
(5)\t2\tests\index\controller下,實作郵件接口的mock類,要斷言的
FakeEmailService.php
(6)測試類,主要斷言了抛異常時,郵件發送成功。\t2\tests\index\controller下,
LogAnalyzerTest.php
cmd下測試通過。
[size=large]總結[/size]
原作者認為:
一個測試中,應該最多隻有一個mock對象,所有其他僞對象都應該是樁件。如有多個mock對象,應分成多個測試,確定每個測試隻有一個mock對象。
一個測試隻能斷言工作單元三種最終結果中的一種。3種結果是,斷言傳回值,斷言對象或系統狀态,斷言對象互動。目的要明确。如果有多個不同的測試意圖,應分成多個測試。
上一篇:[url=http://xieye.iteye.com/blog/2387817]php單元測試進階(12)- 核心技術 - mock對象[/url]
下一篇:[url=http://xieye.iteye.com/blog/2387820]php單元測試進階(14)- 核心技術 - 動态mock對象[/url]