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.
我正在编写我的第一个 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.