コード:ユニットテスト
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();
}
}
私たちが依存するコードを変更せずに実装を切り替えることができます依存性注入を使用することを、理解しています。
本書では、「ユニットテストを書くのが非常に難しい...」と書かれています。
しかし、私はどのように依存性注入なしで単体テストのために非常に難しいか理解できません!私の直感は協力しません!
「DamselRescuingKnight」クラスと他の優れたサンプルクラス(DIなし)のjunit/unitテストを書くことができます。これにより、DIがユニットテストを容易にするポイント/ステージを実現できますか?
あなたのコードはとてもシンプルなので、本当に説明するのは難しいです。 quest.embarkが複雑なコードで、データベースにアクセスし、ユーザー入力と複数のコンピュータが関係する場合は、複雑なコードをより簡単なものに置き換えることをお勧めします。しかし、あなたのコードでは単体テストでさえ意味がありません。 quest.embarkはテストする必要がありますが、ここにあるコードはテストしません。 –