2017-08-26 116 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。