공유 연결과 관련하여 질문이 있습니다. 나는이 문제를 해결하기 위해 여러 주 동안 노력했으며 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');
나는 그것을 시도하고 각 함수 내에서 데이터베이스 선언을 제거했지만 오류 메시지가 나타납니다. "부재 함수에서 구성원 함수 쿼리()를 호출하면"내 tearDown 함수에 대해 불평합니다. 그런 다음 tearDown 함수에 전역 $ mysqli 및 선언을 추가 한 다음 일반적으로 얻는 exakt 동일한 오류 메시지를 봅니다. 즉, 테스트 함수에서 "정의되지 않은 변수 mysqli"를 얻습니다. 아니면 각 함수 내에 global $ mysqli를 추가해야 할 필요가 있다는 것을 의미합니까? – user2402851
각각의'var'을 출력 해 보았습니까? 비어 있지 않은지 확인해 봤습니까? – Brian
$ mysqli를 echo하려고하면 "class mysqli의 객체를 문자열로 변환 할 수 없습니다"라는 메시지가 나온다. – user2402851