PHPunit 测试:第二次测试在数据库连接上失败

PHPunit test: Second test onwards fails on db connection

我正在编写我的第一个 phpunit 测试,这里是 class 用于测试

require_once "../../configure.php";

class OrderTest extends PHPUnit_Framework_TestCase
{


    public function testLoadOrder_O275()
    {
        $o = new Order(275);
        $this->assertEquals(275, $o->OrderID);
    }

    public function testLoadOrder_O1_Fail(){
        $o2 = new Order(1);
        $this->assertEquals(1, $o2->OrderID);
    }
}

我还有另外两个 class 使用我的 configure.php 自动加载的系统,第一个是使用 mysqli 扩展连接到数据库的数据库 class,另一个是 Order class 将 int 作为构造的输入并从数据库加载它。

我的第一个测试成功加载但第二个测试给出

DB::Execute(): Couldn't fetch mysqli

其中 DB 是 class 名称,Execute 是我在 class [非静态] 中的 public 函数。如果我颠倒函数的顺序,那么第一个函数开始给出相同的错误,但稍后会起作用。任何原因?或解决方案?

注意:当我在测试中重新连接到数据库时,它工作正常。所以,现在我的问题是为什么要关闭数据库连接?当我的代码中没有明确关闭时。

PHPUnit 正在尝试序列化和反序列化您的数据库 class,这会终止您的连接。我遇到了同样的问题。

您将需要执行以下操作之一:(1) 使用更好的依赖注入来删除数据库依赖项,(2) 模拟您的数据库 class 以进行测试,(3) 重新连接在每个需要数据库访问的测试方法中,或者 (4) 告诉 PHPUnit 不要使用 $backupGlobalsBlacklist@backupStaticAttributes$backupStaticAttributesBlacklist 的某种组合来序列化和反序列化 class,具体取决于在你的代码上。 (根据您发布的内容,最后两个看起来最相关。)

你可以read more about the problem and the last option above in the documentation.