Рекомендации по предоставлению данных – PHPUnit

В настоящее время я пишу единицы тестов для библиотеки, после рефакторинга бизнес-логики из данных, я сейчас немного запутался в том, как теперь проверить логику!

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

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

Как сказано, процесс вычисления – довольно сложный процесс, не совсем $a + $b .

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

Я не хочу использовать макет, так как фактически проверяю методы / функции.

Если мы вычисляем что-то, основанное на 4 параметрах, то мой поставщик данных будет передавать 5. Первый параметр – это ожидаемый результат, за которым следуют параметры, которые должны быть переданы методу / функции.

Из этого, мой звонок довольно прямолинейный:

 public static function GetRemoteAddressFromWebServerDataProvider() { return array( array('127.0.0.1', NULL, '127.0.0.1'), array('127.0.0.1', '127.0.0.1', NULL), ); } /** * @dataProvider GetRemoteAddressFromWebServerDataProvider */ public function testGetRemoteAddressFromWebServer($Result, $HTTPXSetting, $RemoteAddress) { $_SERVER['HTTP_X_FORWARDED_FOR'] = $HTTPXSetting; $_SERVER['REMOTE_ADDR'] = $RemoteAddress; $this->assertEquals($Result, GetRemoteAddressFromWebServer()); } 

Чтобы расширить пример Стивена, иногда бывает полезно указать имя для каждого набора данных. Когда кто-то терпит неудачу, PHPUnit будет отображать свое имя, а не «данные # 0» в сообщении об ошибке.

 public static function GetRemoteAddressFromWebServerDataProvider() { return array( 'not forwarded' => array('127.0.0.1', NULL, '127.0.0.1'), 'no remote address' => array('127.0.0.1', '127.0.0.1', NULL), ); }