-Code von Spring in Aktion:Unit-Tests ohne Dependency Injection
public class DamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
this.quest = new RescueDamselQuest();
}
public void embarkOnQuest() {
quest.embark();
}
}
public class BraveKnight implements Knight {
private Quest quest;
public BraveKnight(Quest quest) {
this.quest = quest;
}
public void embarkOnQuest() {
quest.embark();
}
}
public class BraveKnightTest {
@Test
public void knightShouldEmbarkOnQuest() {
Quest mockQuest = mock(Quest.class);
BraveKnight knight = new BraveKnight(mockQuest);
knight.embarkOnQuest();
verify(mockQuest, times(1)).embark();
}
}
verstehe ich die Verwendung von Dependency Injection, die uns Implementierung wechseln können, ohne dass die je Code zu modifizieren.
Das Buch sagt "schrecklich schwierig, einen Unit Test zu schreiben ...".
Allerdings kann ich nicht verstehen, wie es sehr schwierig für Unit-Tests ohne Abhängigkeits-Injektion wird! Meine Intuition weigert sich zu kooperieren!
Können Sie anfangen, Junit-/Unit-Tests für die Klasse "DamselRescuingKnight" und für jede andere bessere Beispielklasse (ohne DI) zu schreiben, um mir den Punkt/die Stufe zu verdeutlichen, an dem DI Komponententests vereinfacht?
Ihr Code ist sehr einfach, so dass es schwer zu erklären ist. Wenn quest.embark eine komplizierte Menge an Code ist, in eine Datenbank geht, die Benutzereingaben beinhaltet, und mehrere Computer, dann möchten Sie den komplizierten Code durch etwas einfacheres ersetzen. Aber in Ihrem Code ist es sinnlos, sogar Unit-Test. quest.embark muss getestet werden, aber der Code, den du hier hast, funktioniert nicht. –