程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 初識 PHPunit stub 模擬返回數據,phpunitstub

初識 PHPunit stub 模擬返回數據,phpunitstub

編輯:關於PHP編程

初識 PHPunit stub 模擬返回數據,phpunitstub


   這是這段時間以來結合 PHPunit 文檔和大牛們的講解,想記錄下自己學習到的知識,未來參考補充,完善學到的東西

   我們一般使用單測對公司業務裡的代碼進行測試,他會幫忙找到你的一個個小小的思考不夠全面的地方。(雖然大牛說過開發可以先寫單測再來寫實現的代碼,然而現在的我感覺離那個還是有好多距離來著)

 

  stub(樁件):

    “將對象替換為(可選地)返回配置好的返回值的測試替身的實踐方法稱為上樁(stubbing)”——這是官方文檔給出的上樁解釋

    現在倒回來看我才理解,怎麼說呢?舉個梨子。

====前提

    我想測試的是這樣一個方法:switchClothes($username)  ----通過名字查詢數據庫,性別是1的,就返回褲子,是0的,就返回裙子;

          

<?php
        Class Switch{
            public function switchClothes($username){
                $database=new database();
                $gender=$databse->find("id=$username");
                if($gender==0){
                        return "裙子";
                }else{
                        return "褲子";
                }
            }
        }

 

    查詢數據庫我封裝了一個Database類裡面的: find()

 

====開始寫測試

         首先我需要測試的是switchClothes這個類,可是在這個類裡我需要去通過實例化database這個類用select方法,查詢數據庫再來得到我到底是要褲子還是裙子。所以,,真的是太麻煩了,我只是單純的想測測這個方法的邏輯好麼,萬一數據庫掛了,萬一這個username不存在,我難道還要專門去數據庫創造這樣一條數據麼,太麻煩了也不夠好。萬一需要測試包含更新數據的方法,難道還要真的修改數據麼?

         stub就華麗麗降臨了。媽媽再也不用擔心我要去操作數據庫,再也不擔心接口不通神馬的了。

    

    我可以對這個類進行上樁。說通俗點,我覺得就是對這個類進行了一個模擬,做了一個假的database類;

    如上如  A=switchClothes  B=database類  D=數據庫   C=stub 的那個類

    本來應該是A調用B,B查詢數據庫的.

    但是C的存在就走了紅色那條線,C不會去查數據庫,C是被我掌控的,我可以指定裡面的find()方法返回1或者0 至少在A看來它和B一樣,反正會給我返回個0或者1來的。這就等於C 將A與B,D這個體系隔絕了開來,減少了耦合;

    然後,就可以開始構造我需要的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')//想要設置返回值的方法
             ->willReturn(0);//設置返回值 

        // 現在調用 $stub->select() 將返回 '裙子'。
        $this->assertEquals('裙子', $stub->find());
    }
}
?>                

 這就是C了。

 單測的時候,走紅色那條路就行了。

 all

 

 

       

   

    

   

          

 

  

  

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved