Java 对于spring中的单元测试,紧密耦合/依赖注入是如何产生问题的?

Java 对于spring中的单元测试,紧密耦合/依赖注入是如何产生问题的?,java,spring,unit-testing,Java,Spring,Unit Testing,我正在阅读一本关于spring的书,书中说依赖注入有助于紧/松耦合和单元测试 我可以理解紧耦合部分,但单元测试部分对我来说毫无意义。这本书说,如果我们正在注入依赖项,使用类似spring的依赖项注入框架,我们可以使用类似mockito的框架创建依赖项的模拟对象,然后注入它 我不明白的是,在紧耦合的情况下,我们可以使用类似mockito的框架。依赖注入如何帮助单元测试 示例应用程序 Loose coupling between quest and braverknight class Brav

我正在阅读一本关于spring的书,书中说依赖注入有助于紧/松耦合和单元测试

我可以理解紧耦合部分,但单元测试部分对我来说毫无意义。这本书说,如果我们正在注入依赖项,使用类似spring的依赖项注入框架,我们可以使用类似mockito的框架创建依赖项的模拟对象,然后注入它

我不明白的是,在紧耦合的情况下,我们可以使用类似mockito的框架。依赖注入如何帮助单元测试

示例应用程序

Loose coupling between quest and braverknight
 
class BraveKnight implements Knight{
private Quest quest; //an interface

//..constructor

oublic void embarkOnQuest{
     quest.embark()
}
单元测试示例

@Test
public void test1{

Quest mock quest = mock(Quest.class);
BraveKnight knight = new BraveKnight(mockQuest);
knight.embarkOnQuest();
verify(mockQuest,times(1)),embark());
}
如果在我们的示例应用程序中,我们将Quest替换为RescuedDamselQuest,则存在硬耦合,这是有问题的


但我们仍然可以通过模拟RsecueDamselQuest对象来进行单元测试。关于单元测试和依赖注入/硬松耦合,我缺少了什么?

在非DI版本中,Knight将在其内部调用
new RescueDamselQuest()
,而不可能提供模拟。