2017-05-18 7 views
0

내 코드에서 예외를 테스트하려고합니다.파일이 존재하지 않을 때 File_get_contents가 false로 평가되지 않음

public function testGetFileThrowsException(){ 
    $this->expectException(FileNotFoundException::class); 
    $file = "db.json"; 
    $this->review->getData($file); 
} 

"db.json"파일이 존재하지 않습니다. 내 목표는 tp FileNotFoundException 던져 getData() 파일이 있습니다.

1) CompanyReviewTest::testGetFileThrowsException 
file_get_contents(db.json): failed to open stream: No such file or directory 

그래서 테스트가 성공적으로 실행되지 않습니다 대신 예외를 False로 평가하고 던져의, file_get_contents가 반환 작동하는지

public function getData($path){ 

    if(file_get_contents($path) === false){ 
     throw new FileNotFoundException; 
    } 
    return $file; 
} 

문제는 : 여기 GetData의() 코드입니다. 왜 이런 일이 일어날까요?

+0

___ 약간의 설명 : ___'$ file'은 해당 메서드에 없습니다 ???? 하지만 if ($ file = file_get_contents ($ path) === false) {' – RiggsFolly

+0

}으로 코딩하면됩니다. 1) 디버깅하는 동안 오류보고 기능을 켜 놓는 것을 잊지 마십시오. 2) 오류보고가 켜져 있으면 오류 로그를 확인하십시오. – RiggsFolly

+0

$ file에 대한 정보를 보내 주셔서 감사합니다. 불행히도, 내 목표는 $ 경로가 존재하지 않는 경우 예외가 throw됩니다 경우 테스트하는 것입니다. –

답변

1

file_get_contents()는 E_WARNING 레벨을 생성 아마 (내가 추측 더 나은 솔루션을) 확인하는 것입니다 오류 (스트림을 열지 못했습니다.)는 예외 클래스를 사용하여 이미 처리하고 있으므로이를 억제하려고합니다.

당신은 file_get_contents() 앞의 예를 PHP's error control operator@를 추가하여이 경고를 억제 할 수

<?php 

$path = 'test.php'; 
if (@file_get_contents($path) === false) { 
    echo 'false'; 
    die(); 
} 

echo 'true'; 

?> 

위 거짓 메아리, 그것은 E_WARNING 상기 에코 또는 거짓을 반환 @ 연산자없이. 경고 오류가 throw 기능을 방해하지만 코드를 보지 않아도 말할 수없는 경우 일 수 있습니다.

+0

하지만'@'오류 supressor ___very sparingly___를 사용하십시오 – RiggsFolly

0

당신은이 솔루션이 가난한 사람은 그

public function getData($path){ 

    if(@file_get_contents($path) === false){ 
     throw new FileNotFoundException; 
    } 
    return $file; 
} 

같은 오류를 숨기거나 파일이 존재하는 경우

public function getData($path){ 

if(file_exists($path) === false){ 
    throw new FileNotFoundException; 
} 
return $file; 
}