使用phpunit sqlite内存数据库测试mysqli数据库类

时间:2017-08-26 18:20:23

标签: php mysqli phpunit

我有一些使用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内存数据库。但是,正如预期的那样,我收到了这个错误:

  

未定义的属性:PDO :: $ affected_rows

根据文件:

  

PDO仅用于夹具清洁和设置以及断言。您可以在自己的代码中使用任何数据库抽象。

我怀疑这只意味着我必须为与PDO兼容的mysqli创建一个包装器。或者有没有办法测试我的代码而不将其转换为使用PDO?

1 个答案:

答案 0 :(得分:1)

Mysqli对象和PDO对象不兼容。您正在将PDO对象传递给期望mysqli对象的代码。如果你有要测试的mysqli代码,你有两个选择:

  1. 使用mysqli进行测试。这(据我所知)排除了内存数据库。
  2. 将所有代码转换为PDO。这允许您传递任何PDO对象,无论是MySQL,PostgreSQL,SQLite等等。这有点像使用PDO。
  3. 我不会写一个包装器。这引入了本身需要测试的不必要的复杂性。如果你要花费那么多精力,你也可以把它转换成PDO。