2013-05-27 3 views
0

공유 연결과 관련하여 질문이 있습니다. 나는이 문제를 해결하기 위해 여러 주 동안 노력했으며 PDO 연결, getConnetion과 같은 많은 다른 것들을 시도했다. 그러나 나는 아직도 그것을 작동시키지 않는다. 내가하고 싶은 일은 내 데이터베이스 ONCE에 대한 연결을 만든 다음 다시 선언 할 필요가 없다는 것입니다. PHPUnit에는 내가 익숙한 setUp과 tearDown 함수가 있습니다. 기본적으로 setUp에서 데이터베이스 연결을 선언하여 각 ​​테스트 전에 단위 테스트를 실행하는 데 필요한 데이터베이스에 연결되도록합니다. 지금은 각 함수 내에서 데이터베이스에 새로운 연결을 선언해야만 작동 할 수 있습니다. 그렇지 않으면 나는 각 함수에 "정의되지 않은 변수 $ mysqli"가 있다는 오류 메시지가 나타나거나 "비 객체에 대한 멤버 함수 쿼리() 호출"이라고 말할 수 있습니다. 이것은 내 코드입니다 :기능 간 공유 연결

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

당신의 setUp() 함수에서 global 키워드를 사용해보십시오. 이처럼 :

global $mysqli; 

당신은 사용할 수 있습니다

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

를 전역 변수로.

+0

나는 그것을 시도하고 각 함수 내에서 데이터베이스 선언을 제거했지만 오류 메시지가 나타납니다. "부재 함수에서 구성원 함수 쿼리()를 호출하면"내 tearDown 함수에 대해 불평합니다. 그런 다음 tearDown 함수에 전역 $ mysqli 및 선언을 추가 한 다음 일반적으로 얻는 exakt 동일한 오류 메시지를 봅니다. 즉, 테스트 함수에서 "정의되지 않은 변수 mysqli"를 얻습니다. 아니면 각 함수 내에 global $ mysqli를 추가해야 할 필요가 있다는 것을 의미합니까? – user2402851

+0

각각의'var'을 출력 해 보았습니까? 비어 있지 않은지 확인해 봤습니까? – Brian

+0

$ mysqli를 echo하려고하면 "class mysqli의 객체를 문자열로 변환 할 수 없습니다"라는 메시지가 나온다. – user2402851