Intereting Posts
Чтение результатов запроса HTTP в Android Memcache подключается, но не отвечает на любую команду PHPMailer работает на localhost, но не работает на сервере Кратчайшая / самая длинная строка в массиве PHP Создание случайного числа с результатом смещения в PHP Необычный результат при слиянии двух прозрачных изображений в php Переменная сеанса PHP из поддомена в основной домен Facebook не показывает все открытые графические изображения PHP-код mkdir ('images', '0777') создает папку с разрешениями 411! Зачем? Невозможно сбросить запрос, чтобы показать сообщение ramdom после первого цикла WordPress Авторизованные приложения GAE должны находиться в том же регионе, что и экземпляр базы данных | Google App engine IO: Ошибка # 2038 jquery uploadify Чрезвычайно большие целые числа в PHP Самый эффективный способ отправки информационных бюллетеней Передача безопасных файлов cookie на PHP через AJAX

PHPUnit: утверждать параметр, когда он передается для издевательства объекта

Для кода ниже,

$mockObject->expects($this->at(0)) ->method('search') ->with($searchConfig) ->will($this->returnValue([])); 

Эта строка автоматически сделает подтверждение того, что при вызове метода search он должен содержать параметры $searchConfig . В этом случае мы должны предоставить полностью сопоставленный $searchConfig но иногда это сложно, если это массив или объект.

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

Например, я могу создать функцию закрытия, чтобы утверждать, как показано ниже, вместо метода ->with()

 function ($config){ $this->assertFalse(isset($config['shouldnothere'])); $this->assertTrue($config['object']->isValidValue()); } 

Solutions Collecting From Web of "PHPUnit: утверждать параметр, когда он передается для издевательства объекта"

Вы можете использовать ->with($this->callback()) и передать закрытие для выполнения более сложных утверждений в аргументе.

Из документов PHPUnit

Ограничение callback () может использоваться для более сложной проверки аргументов. Это ограничение принимает обратный вызов PHP как единственный аргумент. Обратный вызов PHP получит аргумент, который будет проверяться как единственный аргумент, и должен возвращать TRUE, если аргумент проходит проверку и FALSE в противном случае.

Пример 10.13: Более сложная проверка аргументов

getMock ('Observer', array ('reportError'));

  $observer->expects($this->once()) ->method('reportError') ->with($this->greaterThan(0), $this->stringContains('Something'), $this->callback(function($subject){ return is_callable(array($subject, 'getName')) && $subject->getName() == 'My subject'; })); $subject = new Subject('My subject'); $subject->attach($observer); // The doSomethingBad() method should report an error to the observer // via the reportError() method $subject->doSomethingBad(); } } ?> -  $observer->expects($this->once()) ->method('reportError') ->with($this->greaterThan(0), $this->stringContains('Something'), $this->callback(function($subject){ return is_callable(array($subject, 'getName')) && $subject->getName() == 'My subject'; })); $subject = new Subject('My subject'); $subject->attach($observer); // The doSomethingBad() method should report an error to the observer // via the reportError() method $subject->doSomethingBad(); } } ?> 

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

 $mockObject->expects($this->at(0)) ->method('search') ->with($this->callback( function ($config){ if(!isset($config['shouldnothere']) && $config['object']->isValidValue()) { return true; } return false; }) ->will($this->returnValue([]));