Nein , die Abhängigkeitsinjektion ist für Komponententests nicht unbedingt erforderlich.
Die Abhängigkeitsinjektion hilft, wenn Sie eine Klasse haben, die eine abhängige Klasseninstanz benötigt, um eine Teilverarbeitung durchzuführen. Anstelle von DI können Sie die Logik einer Geschäftsmethode in einen Daten-Gethering-Teil (der nicht Unit-Test-fähig ist) und einen Berechnungsteil, der Unit-Test-fähig ist, unterteilen.
Beispiel (mit DI) Diese Implementierung ist abhängig von Employee, Account, ...
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;
...
}
Nach Trennung von Datenerfassung und Berechnung:
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
...
}
Der Berechnungsteil kann leicht ohne Abhängigkeitsinjektion getestet werden.