Как я могу выполнить тест PHPunit для нескольких исключений
Я хочу проверить массив маршрутов, чтобы увидеть, все ли они бросают
AuthenticationException
$routes = [
'bla/bla/bloe',
'bla/bla/blie',
etc..
];
public function test_not_alowed_exception(){
foreach ($routes as $route){
$this->assertTrowsAuthenticationError($route);
}
}
public function assertTrowsAuthenticationError($url): void {
// Tell PHPunit we are expecting an authentication error.
$this->expectException(AuthenticationException::class);
// Call the Url while being unauthenticated to cause the error.
$this->get($url)->json();
}
Мой код отлично работает для первой итерации, однако из-за исключения тест останавливается после первой итерации.
Эта проблема:
- Я проверяю на исключение.
- Исключение успешно сгенерировано.
- PHPUnit останавливает тест. <- Это то, что делают исключения.
- Новая итерация должна начаться со следующего URL. Такого не бывает.
Как я могу перебрать набор URL-адресов, чтобы проверить их на наличие AuthenticationException?, Так как первое исключение по дизайну php останавливает сценарий?
1 ответ
Исключение завершит тестирование так же, как исключение завершит выполнение кода. Вы можете поймать только одно исключение за тест.
В общем, когда вам нужно выполнить один и тот же тест несколько раз с разными входными данными, вы должны использовать поставщиков данных.
Вот что вы могли бы сделать:
public function provider() {
return [
[ 'bla/bla/bloe' ],
[ 'bla/bla/blie' ],
etc..
];
}
/**
* @dataProvider provider
*/
public function test_not_alowed_exception($route){
$this->assertTrowsAuthenticationError($route);
}
public function assertTrowsAuthenticationError($url): void {
// Tell PHPunit we are expecting an authentication error.
$this->expectException(AuthenticationException::class);
// Call the Url while being unauthenticated to cause the error.
$this->get($url)->json();
}