這是這段時間以來結(jié)合?phpunit?文檔和大牛們的講解,想記錄下自己學(xué)習(xí)到的知識,未來參考補充,完善學(xué)到的東西
? ?我們一般使用單測對公司業(yè)務(wù)里的代碼進行測試,他會幫忙找到你的一個個小小的思考不夠全面的地方。(雖然大牛說過開發(fā)可以先寫單測再來寫實現(xiàn)的代碼,然而現(xiàn)在的我感覺離那個還是有好多距離來著)
?
stub(樁件):
“將對象替換為(可選地)返回配置好的返回值的測試替身的實踐方法稱為上樁(stubbing)”——這是官方文檔給出的上樁解釋
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
現(xiàn)在倒回來看我才理解,怎么說呢?舉個梨子。
====前提
我想測試的是這樣一個方法:switchClothes($username) ?----通過名字查詢數(shù)據(jù)庫,性別是1的,就返回褲子,是0的,就返回裙子;
<?php Class Switch{ public function switchClothes($username){ $database=new database(); $gender=$databse->find("id=$username"); if($gender==0){ return "裙子"; }else{ return "褲子"; } } }
查詢數(shù)據(jù)庫我封裝了一個Database類里面的: find()
?
====開始寫測試
? ? ? ? ?首先我需要測試的是switchClothes這個類,可是在這個類里我需要去通過實例化database這個類用select方法,查詢數(shù)據(jù)庫再來得到我到底是要褲子還是裙子。所以,,真的是太麻煩了,我只是單純的想測測這個方法的邏輯好么,萬一數(shù)據(jù)庫掛了,萬一這個username不存在,我難道還要專門去數(shù)據(jù)庫創(chuàng)造這樣一條數(shù)據(jù)么,太麻煩了也不夠好。萬一需要測試包含更新數(shù)據(jù)的方法,難道還要真的修改數(shù)據(jù)么?
? ? ? ? ?stub就華麗麗降臨了。媽媽再也不用擔(dān)心我要去操作數(shù)據(jù)庫,再也不擔(dān)心接口不通神馬的了。
我可以對這個類進行上樁。說通俗點,我覺得就是對這個類進行了一個模擬,做了一個假的database類;
如上如 ?A=switchClothes ?B=database類 ?D=數(shù)據(jù)庫 ? C=stub 的那個類
本來應(yīng)該是A調(diào)用B,B查詢數(shù)據(jù)庫的.
但是C的存在就走了紅色那條線,C不會去查數(shù)據(jù)庫,C是被我掌控的,我可以指定里面的find()方法返回1或者0 至少在A看來它和B一樣,反正會給我返回個0或者1來的。這就等于C 將A與B,D這個體系隔絕了開來,減少了耦合;
然后,就可以開始構(gòu)造我需要的C了。
<?php use PHPUnit\Framework\TestCase; class StubTest extends TestCase { public function testStub() { // 為database類建立樁件。 $stub = $this->getMockBuilder("database")//類名 ->setMethods(array('find')) //可以是多個方法 ->getMock(); // 配置樁件。 $stub->method('find')//想要設(shè)置返回值的方法 ->willReturn(0);//設(shè)置返回值 // 現(xiàn)在調(diào)用 $stub->select() 將返回 '裙子'。 $this->assertEquals('裙子', $stub->find()); } } ?>
這就是C了。
?單測的時候,走紅色那條路就行了。
?all
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號