es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo probar un método vacío individual dentro de una clase con PHPUnit?

He estado buscando un poco en busca de una respuesta a esto, pero no logro encontrar algo concreto.

Supongamos que tengo una clase con varios métodos y dentro de esa clase tengo un método único que solo es llamado desde una petición de Javascript. Ese método tiene algunas otras llamadas a métodos dentro de él. Sin embargo, no tiene ningún valor de retorno ni parámetros. Quiero probar algunos casos para ese método. Aquí tienes un ejemplo:

public function myMethod(): void{
    $dataArray = request()->data;
    $service = $this->doMath();
    $start = $service->getStart($paramA, $paramB);

    // Cálculos aquí para obtener $someData
    $end = $someData;

    $this->final['start'] = $start;
    $this->final['end'] = $end;
}

Entonces, básicamente, quiero escribir algunas pruebas para myMethod() y darle diferentes valores a $paramA y $paramB y verificar que $this->final tenga las salidas correctas/incorrectas.

¿Cuál sería la forma de hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para realizar pruebas unitarias de la función myMethod() con diferentes valores de $paramA y $paramB, y comprobar la salida de $this->final, puedes seguir estos pasos:

    Paso 1: Simular el objeto de solicitud (Request)

    Dado que myMethod() utiliza request()->data, necesitamos simular el objeto de solicitud para pasar datos de prueba. Puedes lograr esto creando un objeto de solicitud simulado con los datos de prueba deseados y luego configurándolo en el caso de prueba utilizando el método app()->instance().

    Paso 2: Crear un objeto de servicio simulado (Mock)

    Para aislar la función myMethod() para las pruebas, necesitamos simular las llamadas a los métodos doMath() y getStart(). Puedes crear un objeto de servicio simulado que extienda la clase de servicio original y sobrescriba estos métodos con datos de prueba.

    Paso 3: Llamar a myMethod() y comprobar la salida

    Finalmente, puedes llamar a myMethod() con los valores de prueba deseados de $paramA y $paramB, y luego comprobar la salida del array $this->final para verificar si está en el formato esperado.

    Aquí tienes un ejemplo de código de prueba para la función myMethod():

    public function testMyMethod()
    {
        // Paso 1: Simular el objeto de solicitud con datos de prueba
        $request = \Illuminate\Http\Request::create('/', 'POST', ['data' => ['test' => 'data']]);
        app()->instance(\Illuminate\Http\Request::class, $request);
    
        // Paso 2: Crear un objeto de servicio simulado con datos de prueba
        $serviceMock = $this->getMockBuilder(Service::class)
                          ->setMethods(['getStart'])
                          ->getMock();
        $serviceMock->method('getStart')
                    ->with('testA', 'testB')
                    ->willReturn('testStart');
        $this->app->instance(Service::class, $serviceMock);
    
        // Paso 3: Llamar a myMethod() y comprobar la salida
        $objectUnderTest = new MyClass();
        $objectUnderTest->myMethod();
        $this->assertEquals(['start' => 'testStart', 'end' => 'testEnd'], $objectUnderTest->final);
    }
    

    En este ejemplo, hemos simulado el objeto de solicitud con datos de prueba y creado un objeto de servicio simulado con una implementación simulada del método getStart(). Luego llamamos a myMethod() en una instancia de MyClass y comprobamos la salida del array $this->final para verificar si coincide con la salida esperada.

Comments are closed.