2011-05-12 6 views
1

zend 프로젝트에서 모델을 테스트하고 있는데 remove() 메소드를 호출하는 방법에 대한 질문이 있습니까? remove() 메서드를 호출하는 방법은 무엇입니까?

내가 테스트입니다 찾기 방법 :

<? 

class Admin_Model_Member2 extends Custom_Model_Base { 


    protected function __construct() { 
     parent::__construct(); 
    } 



    static function load($id) { 
     return self::_selectAndBind(
       get_class(), 
         self::getDefaultAdapter() 
         ->select() 
         ->from('member') 
         ->where('id = ?', array($id)), 
       true); 
    } 



    function remove() { 
     return $this->delete(); 
    } 



} 

Admin_Model_Member2이 Custom_Model_Base을 확장, 이것이 Custom_Model_Base이다

abstract class Custom_Model_Base { 
static public function init($default_adapter = null) 
    { 
     if (self::$_db_default === null) 
     { 
      if (!is_null($default_adapter)) 
      { 
       if (!$default_adapter instanceof Zend_Db_Adapter_Abstract) 
       { 
        throw new Exception('Provided adapter does not extend Zend_Db_Adapter_Abstract'); 
       } 
       self::$_db_default = $default_adapter; 
      } 
      else if (Zend_Registry::isRegistered('db')) 
      { 
       self::$_db_default = Zend_Registry::get('db'); 
      } 
      else 
      { 
       throw new Exception('No default adapter provided for the model layer'); 
      } 

     } 
    } 

public function delete() 
    { 
     $where = array(); 
     foreach($this->_primary as $column) 
     { 
      $where[$column] = $this->_data[$column]; 
     } 

     if ($this->_db->delete($this->_table, $where) != 0) 
     { 
      foreach($this->_primary as $column) 
      { 
       $this->_data[$column] = null; 
      } 
      return true; 
     } 
     return false; 
    } 
} 

이 내가 쓰기 테스트 케이스이며,

public function testCanRemove() { 
     $data = "80176"; 
      Admin_Model_Member2::init(); 
     $this->_model = Admin_Model_Member2::load($data); 
     $this->assertTrue($this->_model->remove()); 
    } 

remove() 메서드를 테스트하려고하므로 객체를로드 ($ id)하지만 $ this -> _ mo ($ this -> _ db -> delete ($ this -> _ table, $ this -> _ db -> table) 델타 -> remove(), 그것은 Custom_Model_Base 클래스의 113에서 "비회원에 대한 멤버 함수 delete() $ where)! = 0) ", 문제는 무엇이며 remove() 메서드를 호출하는 방법은 무엇입니까? 생성자가 보호되어 있으므로 Admin_Model_Member2 :: init()을 Admin_Model_Member2의 생성자에서 호출 할 수 없습니다.

+0

두 계정을 병합했습니다. [쿠키 기반 계정에 대한이 FAQ 항목을 읽어보십시오.] (http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/44562/1228) – Will

답변

1

$ this -> _ db는 Custom_Model_Base에서 초기화되지 않았습니다. 레코드를 삭제하기 전에 Admin_Model_Member2 :: init()을 호출해야합니다. 아마도 Admin_Model_Member2의 생성자에있을 것입니다.

관련 문제