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

时间:2015-01-02 13:20:42

标签: php unit-testing mysqli phpunit

我正在编写我的第一个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扩展连接到db的DB类,另一个是使用int作为构造和加载的输入的Order类它来自数据库。

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

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

DB是类名,Execute是我在该类中的公共函数[非静态]。如果我颠倒函数的顺序,那么第一个函数开始给出相同的错误,但后来工作。任何原因?还是解决方案?

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

1 个答案:

答案 0 :(得分:3)

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

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

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