Есть ли способ отключить «Stop On Failure / Error» для определенного теста в PHPUnit? - PullRequest
3 голосов
/ 29 июня 2011

Я занимаюсь разработкой системы документации API и хочу динамически проверить, что к каждой команде прикреплена документация. Самый простой способ сделать это - динамически пройтись по каждой команде и проверить наличие документации, соответствующей ей.

Мой код выглядит так:

public function testMissingDocs()
{
    foreach ($aCommands as $sKey => $aOptions)
    {
        $this->assertNotNull($oDocs->get($sKey));
    }
}

Проблема с этим - функция StopOnFailure / Error в PHPUnit, которая останавливает тест после неудачного первого утверждения. Я понимаю причины этой функциональности и хочу оставить ее включенной для большинства моих тестовых случаев, но для динамических утверждений / тестов это усложняет ситуацию.

Есть ли способ отключить его для каждого теста, чтобы я мог проверить каждую команду в этом тесте?

Ответы [ 2 ]

6 голосов
/ 29 июня 2011

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

/**
 * @dataProvider getDocsForAllCommands
 */
public function testEveryCommandHasDocs($sKey)
{
    $this->assertNotNull($oDocs->get($sKey));
}

public function getKeysForAllCommands()
{
    return array_keys($aCommands);
}
1 голос
/ 29 июня 2011

Если документация для определенного класса или метода отсутствует, это может указывать на проблему с этим классом, а не с методом получения документации.

Хотя, вероятно, проще объединить всю документациюв одном тесте, который не следует передовым методикам модульного тестирования (и, следовательно, поэтому платформа PHPUnit работает против вас, а не против вас).

Я бы предложил один из двух подходов для устранения проблемы:

  1. Выполните рефакторинг ваших тестов так, чтобы у каждого класса и / или метода была своя собственная проверка документации (есть несколько способов запустить несколько тестов за одно выполнение ).
  2. Вместо этого используйте инструмент, такой как PHP_CodeSniffer , так как отсутствие документации можно считать условным, а не функциональным дефектом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...