我正在编写我的第一个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时,它可以正常工作。所以,现在我的问题是它为何关闭数据库连接?当我的代码中没有明确的结束时。
答案 0 :(得分:3)
PHPUnit正在尝试序列化和反序列化您的数据库类,这会终止您的连接。我遇到了同样的问题。
您将需要执行以下操作之一:(1)使用更好的依赖注入来删除数据库依赖项,(2)模拟您的数据库类以进行测试,(3)重新连接每个需要的测试方法数据库访问,或(4)告诉PHPUnit不要使用$backupGlobalsBlacklist
,@backupStaticAttributes
和$backupStaticAttributesBlacklist
的某种组合来序列化和反序列化类,具体取决于您的代码。 (根据您发布的内容,最后两个看起来最相关。)
你可以read more about the problem and the last option above in the documentation。