No , la inyección de dependencia no es esencial para las pruebas unitarias.
La inyección de dependencia ayuda si tiene una clase que necesita una instancia de clase dependiente para realizar un subprocesamiento. En lugar de DI, puede separar la lógica de un método comercial en una parte de recopilación de datos (que no es comprobable por unidad) y una parte de cálculo que puede probarse por unidad.
Ejemplo (usando DI) Esta implementación depende de Empleado, Cuenta, ...
bool hasPermissionToTransferMoney(Employee employee, Account from, Account to, Money amount)
{
if (amount > 100 && employee.isStudent())
return false;
if (to.getOwner().getFamiliyName() == employee.getFamilyName() && ...
return false; // cannot transfer money to himself;
...
}
Después de la separación de la recopilación de datos y el cálculo:
bool hasPermissionToTransferMoney(Employee employee, Account from, Account to, Money amount)
{
return hasPermissionToTransferMoney(employee.isStudent(), employee.getFamilyName(), to.getOwner().getFamilyName(), ...);
}
// the actual permission calculation
static bool hasPermissionToTransferMoney(boolean isStudent, string employeeFamilyName, string receiverFamilyName, ...)
if (amount > 100 && isStudent)
return false;
if (receiverFamilyName == employeeFamiliyName && ...
return false; // cannot transfer money to himself
...
}
La parte de cálculo se puede probar fácilmente sin inyección de dependencia.