2012-01-31 2 views
8

PHPUnit 테스트를 기존 프로젝트에 적용하고 있습니다. 전역 상수 변수는 광범위하게 사용됩니다. 내 단위 테스트 함수는 글로벌 변수가 null이기 때문에 실패합니다. 여기에 어떤 도움을 크게PHPUnit을 사용할 때 전역 변수가 null입니다.

업데이트를 감상 할 수있다

static $secret_key = "a secret Key"; 
class secret_key_Test extends PHPUnit_Framework_TestCase 
{ 
    function test_secret_key() 
    { 
     global $secret_key; 
     $this->assertEquals($secret_key, "a secret Key"); 
    } 
} 

>> Failed asserting that 'a secret Key' matches expected null 

실패한 테스트의 예입니다 : 내가 정적 제거하고 성공하지 않고 클래스 선언에

protected $backupGlobals = FALSE; 

를 추가하는 시도 . 이 S. 버그만에서 원본 문서에서 말했다처럼

+0

Hehe, 격리 및 상태 때문에 단위 테스팅을 시작할 때 전역 변수를 제거해야만합니다. – zerkms

+0

Btw, 당신은 아마도'global $ secret_key = "secret key";''not static ' 그렇지? – zerkms

+0

'static' 키워드 만 제거하면됩니다. 'global'은 함수/메소드 안에서만 의미가 있습니다. –

답변

3

당신은 백업 전역

protected $backupGlobals = FALSE; 

로하지 phpunit을 요청해야합니다 : http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

+0

아니면 bootstrap 과정에서 PHPUnit이 실제 테스트 메소드를 실행하기 전에로드 된 일부 모듈이나 부트 스트랩으로 설정되어 있는지 확인하십시오. –

+0

이것은 내 문제를 해결하지 못했습니다 – rp90

+0

@ rp90 : 우리는 귀하의 실제 코드를 볼 필요가 – zerkms

7

이 답변이 작동하지 않습니다. 나는 사실상 동일한 질문 인 here을 물었고, 더 이해가 잘되는 대답으로 감았습니다. PHPUnit이 볼 테스트 클래스의 보호 된 $ backupGlobals 속성을 덮어 쓸 수 없습니다. 커맨드 라인에서 실행 중이라면 xml 설정 파일을 만들고 거기에 backupGlobals를 false로 설정하여 Globals가 작동하도록 할 수 있습니다.

EDIT : PHPUnit을 사용할 때 $ secret_key를 global로 선언하고 전역 공간에 값을 할당해야합니다. PHP는 기본적으로 전역으로 초기화 된 변수를 전역 이름 공간에 배치하는 것을 기본으로하지만 PHPUnit은 전역을 백업 할 때이 기본값을 변경합니다!

global $secret_key; // Declaring variable global in global namespace 
$secret_key = "a secret Key"; // Assigning value to global variable 

귀하의 코드는 이제 작동합니다 :

다음과 같은 변경 사항이 발생해야합니다.

관련 문제