【发布时间】:2016-03-20 21:27:58
【问题描述】:
来自 Spring in Action 的代码:
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/单元测试,让我意识到 DI 使单元测试更容易的点/阶段?
【问题讨论】:
-
您的代码非常简单,因此很难真正解释。如果 quest.embark 是一段复杂的代码,涉及到数据库,涉及用户输入和多台计算机,那么您可能希望用更简单的代码替换复杂的代码。但是,在您的代码中,即使进行单元测试也是没有意义的。 quest.embark 需要测试,但你这里的代码不需要。
标签: java spring unit-testing junit dependency-injection