No , la inyección de dependencia no es esencial para la prueba de la unidad.
La inyección de dependencia ayuda si tienes una clase que necesita una instancia de clase dependiente para realizar algún subprocesamiento. En lugar de DI, puede separar la lógica de un método de negocio en una parte de obtenció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 hasPermissionToTranferMony(Employee employee, Account from, Account to, Money amount)
{
if (amount > 100 && imployee.isStudent())
return false;
if (to.getOwner().getFamiliyName() == Employee.getFamiliyName() && ...
return false; // cannot transfer money to himself;
...
}
Después de separar la recopilación de datos y el cálculo
bool hasPermissionToTranferMony(Employee employee, Account from, Account to, Money amount)
{
return hasPermissionToTranferMony(employee.isStudent(), Employee.getFamiliyName(), to.getOwner().getFamiliyName(), ....);
}
// the actualal permission calculation
static bool hasPermissionToTranferMony(boolean isStudent, string employeeFamiliyName, string receiverFamiliyName, .....)
if (amount > 100 && isStudent)
return false;
if (receiverFamiliyName == employeeFamiliyName && ...
return false; // cannot transfer money to himself;
...
}
La parte de cálculo se puede probar fácilmente sin inyección de dependencia.