2013-07-01 58 views
2

注:所有的代碼工作正常,沒有PHPUnit的的PHPUnit:memcache_connect不是PHPUnit的測試用例工作

文件1:的common.php:

public function setNIMUID($NIMUID) { 

     if(is_bool(Cache::get("$NIMUID"))) {     
       $user_Array=array("_JID"=>(string)$NIMUID); 
       Cache::set("$NIMUID",$user_Array); 
     } 
     $this->NIMUID=(string)$NIMUID ; 
    } 

文件2:memcache.class。 PHP
方法1:

protected function __construct(array $servers) { 
    if(!$servers) { 
     trigger_error('No memcache servers to connect', E_USER_WARNING); 
    } 
    for($i = 0, $n = count($servers); $i<$n; ++ $i) { 
     ($con = memcache_connect(key($servers[$i]), current($servers[$i])))&&$this->mc_servers[] = $con; 
    } 
    $this->mc_servers_count = count($this->mc_servers); 
    if(!$this->mc_servers_count) { 
     $this->mc_servers[0] = null; 
    } 
} 

方法2:

 static function get($key) { 
     return self::singleton()->getMemcacheLink($key)->get($key); 
     } 

方法3:

static function singleton() { 
    //Write here where from to get the servers list from, like 
    global $memcache_servers; 

    self::$instance||self::$instance = new Cache($memcache_servers); 
    return self::$instance; 
} 

文件3:commonTest.php

public function testCommon() 
     { 
     $Common = new Common(); 
     $Common->setNIMUID("saurabh4"); 
     } 

$ memcache_servers變量:

$memcache_servers = array(
    array('localhost'=>'11211'), 
    array('127.0.0.1'=>'11211') 
    ); 

錯誤:

Fatal error: Call to undefined function memcache_connect() 

回答

2

單元測試應該是可重複的,快速的和孤立的。這意味着你不應該連接到外部服務來單元測試你的課程。 如果你想測試Common是否正常工作,你應該測試它的行爲,在這種情況下,它就是你所期望的調用Cache類。對於那個,you'll need to use mocks。有了嘲諷,你可以設定一些期望,就像這個對象會以特定的方式被調用。如果您的類按預期被稱爲memcached類,則可以假定您的功能正常工作。你怎麼知道緩存類正常工作?因爲Cache類會有自己的單元測試。

爲了使用mocks(或存根),你需要改變你編程的方式,避免像Cache :: set()那樣的靜態calles。相反,你應該使用類實例和普通調用。怎麼樣?將Cache實例傳遞給Common類。這個概念被稱爲Dependency injection。您的通用代碼如下所示:

public function __construct($cache) { 
    $this->cache = $cache; 
} 

public function setNIMUID($NIMUID) { 

    if(is_bool($this->cache->get("$NIMUID"))) {     
      $user_Array=array("_JID"=>(string)$NIMUID); 
      $this->cache->set("$NIMUID",$user_Array); 
    } 
    $this->NIMUID=(string)$NIMUID ; 
}