为什么spring试图将依赖项注入到模拟对象中



我对Mockito很陌生,有一个问题。

我正在为我的应用程序使用Spring的依赖项注入,并尝试测试组件。我有一个这样的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(// @formatter:off
    loader = SpringockitoAnnotatedContextLoader.class,
    classes = { TestContext.class }) // @formatter:on
public class TestClass {
@Autowired
private TestBean testBean;
@Test
public void testSomething() {
// do anything
assertTrue(testBean.getClass().getName().equals("TestBean"));
}
}
}

上下文类别:

@Configuration
public class TestContext {
@Bean(name = "testBean")
public TestBean getTestBean() {
    return Mockito.mock(TestBean.class);
}
} 

TestBean.class:

@Component
public class TestBean {
@Autowired
private AnotherTestBean anotherTestBean;
}

AnotherTestBean.class:

@Component
public class AnotherTestBean {
}

现在,如果我运行此代码,我会得到一个由以下原因引起的错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到[info.imapping.application.configuration.context.AnortherTestBean]类型的合格bean:应至少有1个符合此依赖项自动连线候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

这意味着Spring试图将依赖项注入到我的模拟bean中。有人能告诉我如何防止这种行为吗?

如果我在TestClass中使用@ReplaceWithMock,它会起作用。但我更喜欢在上下文文件中设置我的模型。

您必须像使用testBean一样将anotherTestbean声明为spring托管bean。当spring试图将anotherTestBean放在TestBean中,但spring上下文中没有这样的bean时,就会发生错误。

相关内容

  • 没有找到相关文章

最新更新