¿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