功能之间的共享连接

时间:2013-05-27 16:34:43

标签: database testing mysqli connection phpunit

我有一个关于共享连接的问题。我已经尝试了几个星期来解决这个问题,并尝试过许多不同的东西,如PDO连接,getConnetion,你可以命名。但我仍然没有让它发挥作用。我想要做的是创建一个到我的数据库 ONCE 的连接,然后不必再次声明它。在PHPUnit中,您可以使用我熟悉的setUp和tearDown函数。基本上我想在setUp中声明数据库连接,这样在每次测试之前都会有一个连接到数据库,这是执行单元测试所需要的。目前,我被迫在每个函数中声明一个与数据库的新连接,以使其工作。否则我得到错误消息,说明我有一个“未定义的变量$ mysqli”wihtin每个函数或它可能会说“调用非对象上的成员函数查询()”。这是我的代码:

<?php

include 'functions.php';

class Test extends PHPUnit_Framework_TestCase {

protected function setUp(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');

public function testCheckbrute(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');

$LessThanFive = checkbrute('200', $mysqli);
$this->assertFalse($LessThanFive);

$FiveFailedLogins = checkbrute('201', $mysqli);
$this->assertTrue($FiveFailedLogins);
}

public function testLogin(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');
$AccountIsLockedFalse = Login("xxxx","xxxx", $mysqli);
$this->assertFalse($AccountIsLockedFalse);

$NoUserExists = Login("xxxx","xxxxx", $mysqli);
$this->assertFalse($NoUserExists);
}

protected function tearDown(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db'); 
$mysqli->query("DELETE FROM login_attempts WHERE user_id IN (200, 201)");
$mysqli->query("DELETE FROM members WHERE id IN (200, 201)");
}
}
?>

任何不需要太多重构或时间的具体简单解决方案?这是我不想在每个函数中继续编写的代码片段:

$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');

1 个答案:

答案 0 :(得分:1)

尝试在global功能中使用setUp()关键字。像这样:

global $mysqli;

然后您可以使用:

$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');

作为全球变量。