所以我想實現我的應用程序,將在案件引發異常自動加載,如果命名空間中找不到文件,並在測試我只是確認這是類存在或不...好吧,我試圖檢查它。
我的問題是,我拋出的自動加載的異常,在測試中沒有忽略......並且在測試過程中出現錯誤。 但是我的異常是不是在try catch塊中應該被PHPUnit忽略?
spl_autoload_register(function ($class_name) {
if (strpos($class_name, 'App') !== false) {
$class_file = strtolower($class_name);
$class_file = str_replace('\\', '-', $class_file);
$class_file = str_replace('app-', '', $class_file);
$class_file = sprintf('class-%s.php', $class_file);
$class_file = dirname(__DIR__) . '/includes/' . $class_file;
if (file_exists($class_file)) {
include_once $class_file;
if (! class_exists($class_name)) {
throw new Exception(sprintf('Can\'t load %s class.', $class_name));
}
} else {
// do not throw path of the file.
throw new Exception(sprintf('Can\'t find %s class file.', $class_name));
}
}
});
正如你可以看到它很簡單的代碼。
require dirname(__DIR__) . '/vendor/autoload.php';
use PHPUnit\Framework\TestCase;
class ExceptionsTest extends TestCase {
/**
* @dataProvider data_existing_namespace
*/
public function test_existing_namespaces($class_name, $class_exists) {
try {
$object = new $class_name();
if ($class_exists === true){
$this->assertTrue( class_exists($class_name));
} else {
$this->assertFalse(class_exists($class_name));
}
} catch(Exception $e) {
// do nothing.
}
}
/**
* Data provider for test_Namespace_Autoload
*/
public function data_existing_namespace() {
return [
[ '\App', true ],
[ '\App\Settings', false ],
];
}
}
但是...我仍然得到這個錯誤,我應該(如果我明白的話)趕上。
There was 1 error:
1) Tests\ExceptionTest::test_existing_namespaces with data set #1 ('\App\Settings', false)
Exception: Can't find App\Settings class file.
什麼我可以做晚飯這個錯誤,只使用AssertFalse或AssertTrue?
文檔嘗試刪除聲明'$對象=新的$ CLASS_NAME();'在測試類 – Matteo