¿Cómo probar un método unitario con dependencias en PHP?

Tengo un método con algo de lógica y no estoy seguro de cómo probarlo. Debido a que es una prueba unitaria para este método específico, debe ejecutarse sin conectarse a la base de datos. Leí sobre trozos y maquetas, pero no encuentro la manera de aplicarlos a esta situación.

Me gustaría obligar al Cliente: GetClient a devolver el objeto del cliente con las propiedades correctas para poder probar cada rama lógica.


class ClientType {
    function GetClientType($id) {

    $objClient = Client::GetClient($id);

    if ($objClient->Returning == 1) {
        return 'returning';
    }
    else {
        return 'normal';
    }
    }


Esta es la prueba que tenía en mente


class ResourceTest extends PHPUnit_Framework_TestCase {
    function testGetClientType() {
        $objClientType = new ClientType();
        $this->assertTrue($objClientType->GetClientType(100), 'normal');
    }
}

El problema es la dependencia $ objClient = Client :: GetClient ($ id); GetClient extraerá un cliente de la base de datos, pero necesito reemplazarlo con un Stub para que las pruebas unitarias funcionen sin acceso real a la base de datos.

Conclusió

Si tiene un código como el presentado: refactorícelo y use Inyección de dependencias.Si tiene código heredado o simplemente no desea refactorizar, pruebe esta solución:http: //sebastian-bergmann.de/archives/885-Stubbing-Hard-Coded-Dependencies.htm

Respuestas a la pregunta(2)

Su respuesta a la pregunta