Intereting Posts
Отображать ошибки php при использовании Zend framework Результаты Weird MYSQL с использованием PDO :: FETCH_ASSOC без псевдонима столбца Черный фон при преобразовании многостраничного PDF в JPG с расширением php Imagick Некоторые проблемы с Sphinx и PHP Переменная перехода от компонента к области модели Вставка греческого символа в php по сравнению с студией управления SQL-сервером Иерархия категорий (PHP / MySQL) Получить переменное имя объекта внутри объекта php Объединить 2 массива и суммировать значения (числовые клавиши) Добавить префикс в auto-increment в mysql db Как скопировать электронную почту с Gmail на мой сервер с помощью PHP IMAP? PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям? Laravel Красноречивый Сумма столбца отношения Предупреждение DataTables: table id = big_table – запрошенный неизвестный параметр '0' для строки 0. предварительная установка встроенного видео в YouTube

Может ли phpunit использовать несколько поставщиков данных?

Один вопрос вкратце: может ли phpunit использовать несколько поставщиков данных при запуске теста?

Например, у меня есть метод, называемый getById, и мне нужно запустить для него как успешные, так и неудачные тестовые файлы.

Успешные тестовые окна означают, что он может вернуть соответствующую запись. И для неудачного ввода вход может быть разделен на две категории: недействителен и не выполнен.

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

Таким образом, код выглядит следующим образом:

/** * @dataProvider provideInvalidId * @dataProvider provideFailedId */ public function testGetByIdUnsuccess($id) { $this->assertNull($this->model->getById($id)); } 

Но оказалось, что использовался только первый поставщик данных, игнорируя второй. Хотя я не уверен, что этот сенарио распространен или нет, но вот вопрос. Можем ли мы использовать несколько поставщиков данных? И если мы можем, как?

PS: не нашел слишком много помощи здесь

Solutions Collecting From Web of "Может ли phpunit использовать несколько поставщиков данных?"

Вы можете использовать вспомогательную функцию, как показано ниже. Единственная проблема заключается в том, что общее количество тестовых случаев, предоставляемых всеми «поставщиками вспомогательных данных», велико, может оказаться утомительным выяснить, какой из тестовых примеров вызывает проблему.

 /** * @dataProvider allIds */ public function testGetByIdUnsuccess($id) { $this->assertNull($this->model->getById($id)); } public function allIds() { return array_merge(provideInvalidId(),provideFailedId()); } 

Просто обновление вопроса, был принят запрос на перенос, и теперь код:

 /** * @dataProvider provideInvalidId * @dataProvider provideFailedId */ public function testGetByIdUnsuccess($id) { $this->assertNull($this->model->getById($id)); } 

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

Вы можете добавить комментарий к вашему массиву dataProvider, чтобы обеспечить ту же функциональность, не требуя нескольких dataProviders.

 public static function DataProvider() { return array( 'Invalid Id' => array(123), 'Failed Id' => array(321), 'Id Not Provided' => array(NULL), ); } 

ну, вы могли бы подумать об этом с другой стороны;) вы точно знаете, что вы ожидаете, например getById (1) ожидаемый результат: $ result_expected, а не $ result_null, так что вы могли бы сделать dataprovider как это

 $dataProvider = array(1, 'unexpected'); 

то ваш тестовый метод выглядит следующим образом:

 public function testGetById($id) { $this->assertEquals($result_expected, $obj::getById($id)); } 

поэтому, результат теста:

 .F