php單元測試進(jìn)階(8)- 核心技術(shù) - 樁件(stub) - 屬性注入樁件

php單元測試進(jìn)階(8)- 核心技術(shù) - 樁件(stub) - 屬性注入樁件

本系列文章主要代碼與文字來源于《單元測試的藝術(shù)》鹦马,原作者:Roy Osherove荧缘。譯者:金迎冬殃。

本系列文章根據(jù)php的語法與使用習(xí)慣做了改編杠袱。所有代碼在本機(jī)測試通過辐怕。如轉(zhuǎn)載請注明出處铲觉。
上一篇文章介紹了如何用構(gòu)造方法注入樁件澈蝙,代碼特別容易看懂∧煊模可是缺點(diǎn)是修改了原先的設(shè)計灯荧,改構(gòu)造方法算是修改了代碼意圖,同時假如樁件太多盐杂,代碼就特別丑陋逗载。
可以用依賴注入類庫例如pimple來解決,但還是不好链烈。

本文介紹使用屬性獲取和設(shè)置的方法來注入樁件厉斟,代碼易讀易寫。其實(shí)這個方法和構(gòu)造方法注入沒有多大差別测垛。
一個接口和它的兩個實(shí)現(xiàn)無需改代碼捏膨,需要修改的類有被測類日志分析器類,和測試類食侮。

源代碼

(1)t2\application\index\controller下被測類号涯,日志分析器
LogAnalyzer.php

<?php
namespace app\index\controller;

/**
 * 日志分析器類,也是被測類
 * 
 * 注意锯七,這是用屬性注入的例子链快。
 */
class LogAnalyzer
{
    /**
     * @var IExtensionManager
     */
    private $manager;
    
    public function __construct()
    {
        $this->manager = new FileExtensionManager();
    }
    
    public function setManager($mgr)
    {
        $this->manager = $mgr;
    }
    
    public function getManager()
    {
        return $this->manager;
    }
    
    /**
     * 判斷文件名是否有效,調(diào)用另一個類來實(shí)現(xiàn)
     * @param string $filename
     */
    public function isValidLogFileName($filename)
    {
        return $this->manager->isValid($filename);
    }
}

測試代碼

(2)t2\tests\index\controller\下眉尸,測試類域蜗,用屬性注入樁件
LogAnalyzerTest.php

<?php
namespace tests\index\controller;

/**
 * 測試用的類
 */
class LogAnalyzerTest extends \think\testing\TestCase
{

    /**
     * @test
     * 使用屬性注入樁件的方法 進(jìn)行測試
     * 注意巨双,盡量使得測試的方法名稱有意義,這非常重要霉祸,便于維護(hù)測試代碼筑累。有規(guī)律
     */
    public function isValidFileName_NameSupportedExtension_ReturnTrue()
    {
        //準(zhǔn)備好一個返回true的樁件
        $myFakeManager = new FakeExtensionManager();
        $myFakeManager->willBeValid = true; 
        
        //開始創(chuàng)建被測類的對象,準(zhǔn)備測試
        $analyzer = new \app\index\controller\LogAnalyzer();
        $analyzer->setManager($myFakeManager); // 屬性注入
        $result = $analyzer->isValidLogFileName("short.ext");
        $this->assertTrue($result);
    }
}

cmd下測試通過丝蹭。

上一篇:php單元測試進(jìn)階(7)- 核心技術(shù) - 樁件(stub) - 構(gòu)造函數(shù)注入樁件
下一篇:php單元測試進(jìn)階(9)- 核心技術(shù) - 樁件(stub) - 工廠類注入樁件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慢宗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奔穿,更是在濱河造成了極大的恐慌镜沽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱田,死亡現(xiàn)場離奇詭異缅茉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)男摧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門蔬墩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彩倚,你說我怎么就攤上這事筹我。” “怎么了帆离?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長结澄。 經(jīng)常有香客問我哥谷,道長,這世上最難降的妖魔是什么麻献? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任们妥,我火速辦了婚禮,結(jié)果婚禮上勉吻,老公的妹妹穿的比我還像新娘监婶。我一直安慰自己,他們只是感情好齿桃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布惑惶。 她就那樣靜靜地躺著,像睡著了一般短纵。 火紅的嫁衣襯著肌膚如雪带污。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天香到,我揣著相機(jī)與錄音鱼冀,去河邊找鬼报破。 笑死,一個胖子當(dāng)著我的面吹牛千绪,可吹牛的內(nèi)容都是我干的充易。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼荸型,長吁一口氣:“原來是場噩夢啊……” “哼盹靴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帆疟,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鹉究,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踪宠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體自赔,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年柳琢,在試婚紗的時候發(fā)現(xiàn)自己被綠了绍妨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柬脸,死狀恐怖他去,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倒堕,我是刑警寧澤灾测,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站垦巴,受9級特大地震影響媳搪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骤宣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一秦爆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憔披,春花似錦等限、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸟赫。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間控乾,已是汗流浹背剩失。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工勘究, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勘畔。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像丽惶,于是被迫代替她去往敵國和親炫七。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容