2013-05-27 146 views
0

我有一個關於共享連接的問題。我已經嘗試了很多個星期來解決這個問題,並且嘗試了很多不同的方法,比如PDO連接,getConnetion等等。但我仍然沒有得到它的工作。我想要做的是創建一個連接到我的數據庫ONCE然後不必再聲明它。在PHPUnit中,你有我熟悉的setUp和tearDown函數。基本上我想在setUp中聲明數據庫連接,以便在每次測試之前都會有一個連接到執行單元測試所需的數據庫。目前,我不得不在每個函數中聲明一個到數據庫的新連接以使其工作。否則,我會收到錯誤消息,指出每個函數都有一個「未定義的變量$ mysqli」,或者它可能會說「調用非成員函數的成員函數query()」。這是我的代碼:功能之間的共享連接

<?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

嘗試使用global關鍵字在你setUp()功能。就像這樣:

global $mysqli; 

然後,您可以使用:

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

爲全局變量。

+0

我試過了,並拿走了每個函數中的數據庫聲明,但是我收到一條錯誤消息:「調用一個非對象的成員函數query()」,它抱怨我的tearDown函數。我在tearDown函數中添加了全局的$ mysqli和聲明,然後得到了我通常得到的exakt相同的錯誤消息:「Undefined variable mysqli」在我的測試函數中。或者你的意思是我還需要在每個函數中添加:global $ mysqli? – user2402851

+0

您是否嘗試過打印每個'var'以確保它們不是空的? – Brian

+0

當我嘗試回顯$ mysqli時,它說:「mysqli類的對象無法轉換爲字符串」 – user2402851