2012-01-05 18 views
6

Las respuestas están en JSON y estoy usando un framework MVC personalizado que no estoy seguro de cómo se produce el proceso de solicitud y respuesta. Los métodos de servicio se crean con la siguiente sintaxis.¿Alguna manera de utilizar PHPUnit para probar las solicitudes y respuestas de API utilizando solo PHP?

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

Una petición de JavaScript se vería así /svc/api/getSessions. Mi idea inicial fue simplemente utilizar un enfoque de secuencias ¿existen las mejores prácticas para esta forma de prueba?

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); 
} 
+0

Ver también: [He probado mi clase por unidades, ¿cómo comienzo con una prueba de integración?] (Http://stackoverflow.com/questions/8725879/ive-unit-tested-my-class -now-how-do-i-get-started-with-an-integration-test). – hakre

Respuesta

9

Esto no se parece a mí unit testing sino integration testing. Puede usar PHPUnit para hacerlo, pero primero debe comprender la diferencia.

Hay muchos componentes implicados en conseguir la respuesta para un método determinado servicio:

  1. El despachador: extrae los parámetros de la URL y despacha al método de servicio apropiado.
  2. El método de servicio: ¿El trabajo real debe probarse aquí.
  3. El codificador JSON: convierte el valor de retorno del método de servicio en una respuesta JSON.

Primero debe probar estos individualmente de forma aislada. Una vez que haya verificado que el despachador y el codificador funcionan para las URL generales y los valores de retorno, no tiene sentido gastar las pruebas de ciclos para que funcionen con cada método de servicio.

En su lugar, centre su esfuerzo en probar cada método de servicio sin involucrar estos otros componentes. Su caso de prueba debe instanciar y llamar a los métodos de servicio directamente con varias entradas y hacer afirmaciones sobre sus valores de retorno. No solo requerirá menos esfuerzo de su parte, sino que facilitará el seguimiento de los problemas porque cada falla estará limitada a un solo componente.

+0

Información muy útil. No conozco el funcionamiento interno del marco personalizado que estoy usando, y realmente no puedo tomar el tiempo para revisarlo (no hay documentación). – ezraspectre

+1

@QuincyGlenn: siempre que las clases que cree para mantener los métodos de servicio se puedan crear instancias fuera del marco, puede probarlas como he descrito. –

Cuestiones relacionadas