2016-09-07 4 views
-1

Как выполнить модульный тест для моего кода, который обрабатывает HTTP-запросы. Вместо того, чтобы делать фактический HTTP-вызов, я хочу использовать макетные объекты и проверять, что http-запрос имеет правильный набор тегов и заголовков.PHPUnit mock request object and extract body и заголовок

+1

Это слишком мало информации. Отправьте код, который вы хотите проверить, и, возможно, мы сможем сказать, как его протестировать. Прежде всего, вам нужен код, который может получать издевавшиеся объекты и использовать их. И по этому определению вам нужно использовать класс для http-запросов - пример для curl: https://gitlab.w00tserver.org:617/snippets/2 – iRaS

ответ

0

Ваше описание не содержит большого количества информации. Но для начала я могу помочь вам использовать этот пример кода.

$httpMock = $this->getMockBuilder('\Vendor\Path\HttpHandlerYouWantToMock') 
       ->disableOriginalConstructor() 
       ->setMethods(['setBody', 'setHeader']) 
       ->getMock(); 

$httpMock->expects($this->once()) 
     ->method('setBody') 
     ->with($this->identicalTo('{"test":"test"}')); 


$httpMock->expects($this->once()) 
     ->method('setHeader') 
     ->with($this->identicalTo('Content-Type: application/json')); 

$service = new SomeService($httpMock); 
$service->post('/someApi', '{"test":"test"}'); 

Этот код только в представлении, как все должно выглядеть, но в вашем случае я понятия не имею, что HTTP обработчик вы используете или если один содержит какие-либо другие услуги, которые зависят от.

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

И последний помощью PHPUnit документации https://phpunit.de/manual/current/en/test-doubles.html

+0

Я боюсь, что он не использует класс http - вместо этого использует 'curl_init 'непосредственно ... – iRaS