Любой способ использовать PHPUnit для тестирования запросов и ответов API, используя только PHP? - PullRequest
6 голосов
/ 05 января 2012

Ответы представлены в формате JSON, и я использую специально созданную инфраструктуру MVC, в которой я не уверен, как производится процесс запроса и ответа.Методы обслуживания создаются с использованием следующего синтаксиса.

public function getSessionsMethod()
{
    // data auto encoded as JSON
    return array('hello', 'world');
}

Запрос из JavaScript будет выглядеть следующим образом /svc/api/getSessions.Моя первоначальная мысль состояла в том, чтобы просто использовать потоковый подход. Существуют ли лучшие практики для этой формы тестирования?

public function testCanGetSessionsForAGivenId()
{
    $params = http_build_query(
        array(
            'id' => 3,
        )
    );
    $options = array(
        'http' => array(
            'method'  => 'GET',
            'content' => $params,
            )
        );
    $context  = stream_context_create($options);
    $response = file_get_contents(
        'http://vbates/svc/api/getSessions', false, $context
    );
    $json     = json_decode($response);
    $this->assertEquals(3, $json->response);
}

1 Ответ

10 голосов
/ 05 января 2012

Для меня это не похоже на модульное тестирование , а скорее интеграционное тестирование . Вы можете использовать PHPUnit, но сначала вы должны понять разницу.

Есть много компонентов, участвующих в получении ответа для данного метода обслуживания:

  1. Диспетчер: извлекает параметры из URL и отправляет их в соответствующий метод обслуживания.
  2. Метод обслуживания: выполняет ли здесь настоящую работу.
  3. Кодер JSON: превращает возвращаемое значение метода службы в ответ JSON.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...