2017-08-26 111 views
0

我有一些使用mysqli的數據庫類。例如:用phpunit sqlite內存數據庫測試mysqli數據庫類

class MyDB 
{ 
    function __construct($db) 
    { 
     $this->db = $db; 
    } 

    function add($name) 
    { 
     $sql = "INSERT INTO mytable (name) VALUES ('$name');" 
     $this->db->query($sql); 
     if ($this->db->affected_rows) { 
      return $this->db->insert_id; 
     } 

     return 0; 
    } 
... 

我想用phpunit測試它們,使用sqlite內存數據庫。然而,正如所料,我得到這個錯誤:

Undefined property: PDO::$affected_rows

根據文檔:

PDO is only required for the fixture clean- and set-up and for assertions. You can use whatever database abstraction you want inside your own code.

我懷疑這只是意味着我必須創造一個mysqli的一個包裝,是與PDO兼容。或者有沒有一種方法可以測試我的代碼而無需將其轉換爲使用PDO?

回答

1

Mysqli對象和PDO對象不兼容。您正在將一個PDO對象傳遞給需要一個mysqli對象的代碼。如果你有你想測試的mysqli代碼,你有兩個選擇:

  1. 使用mysqli進行測試。這(據我所知)排除了內存數據庫。
  2. 將您的所有代碼轉換爲PDO。這允許你傳遞任何PDO對象,無論是MySQL,PostgreSQL,SQLite等等。這是使用PDO的一點。

我不會寫封裝。這引入了本身需要測試的不必要的複雜性。如果你要花費很多努力,你也可以把它轉換成PDO。