PHP单元测试:第二次测试在数据库连接上失败


PHPunit test: Second test onwards fails on db connection

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

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);
    }
}

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

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

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

其中DB是类名,Execute是我在该类中的公共函数[不是静态的]。如果我颠倒函数的顺序,那么第一个函数开始给出相同的错误,但后来起作用。有什么理由吗?还是解决方案?

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

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

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

您可以在文档中阅读有关该问题和上述最后一个选项的更多信息