我试图在我的代码中测试异常。
public function testGetFileThrowsException(){
$this->expectException(FileNotFoundException::class);
$file = "db.json";
$this->review->getData($file);
}
" db.json"文件不存在。我的目标是使用getData()文件来抛出FileNotFoundException。这是getData()代码:
public function getData($path){
if(file_get_contents($path) === false){
throw new FileNotFoundException;
}
return $file;
}
问题是,而不是评估为False并抛出异常,而file_get_contents函数返回:
1) CompanyReviewTest::testGetFileThrowsException
file_get_contents(db.json): failed to open stream: No such file or directory
因此测试没有成功运行。关于为什么会发生这种情况的任何想法?
答案 0 :(得分:2)
localStorage
生成E_WARNING级别错误(无法打开流),这是您要在您的异常类中处理它时要禁止的内容。
您可以在file_get_contents()
前添加PHP's error control operator @
来取消此警告,例如:
file_get_contents()
以上回应为false,如果没有<?php
$path = 'test.php';
if (@file_get_contents($path) === false) {
echo 'false';
die();
}
echo 'true';
?>
运算符,则返回E_WARNING和echoed false。情况可能是警告错误干扰了你的投掷功能,但是没有看到代码,这很难说。
答案 1 :(得分:0)
你有2个解决方案,可怜的就是隐藏错误
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;
}