Как я могу выполнить тест PHPunit для нескольких исключений - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу протестировать массив маршрутов, чтобы увидеть, все ли они выдают

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();
}

Мой код отлично работает для первой итерации, однакотест завершается после первой итерации из-за исключения.

Проблема:

  1. Я проверяю исключение.
  2. Исключение успешно сгенерировано.
  3. PHPUnit останавливает тест.<- Это то, что делают исключения. </li>
  4. Новая итерация должна начаться со следующего URL.Этого не происходит.

Как я могу перебрать набор URL-адресов, чтобы проверить их на наличие AuthenticationException ?, так как первое исключение по дизайну php останавливает сценарий?

1 Ответ

0 голосов
/ 19 февраля 2019

Исключение завершит проверку так же, как исключение завершит выполнение кода.Вы можете поймать только одно исключение за тест.

В общем, когда вам нужно выполнить один и тот же тест несколько раз с разными входными данными, вам следует использовать поставщиков данных.

Вот что вы могли бы сделать:

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();
}
...