В настоящее время я пишу единицы тестов для библиотеки, после рефакторинга бизнес-логики из данных, я сейчас немного запутался в том, как теперь проверить логику!
Например, у меня довольно сложный процесс, с которым прошел массив данных 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), ); }