我对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"));
}
}
}
ContextClass:
@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.AnotherTestBean]类型的限定bean:期望至少有一个bean符合此依赖关系的autowire候选资格。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
这意味着Spring试图将依赖项注入到我的模拟bean中。有人可以告诉我如何防止这种行为吗?
如果我在@ReplaceWithMock
中使用TestClass
,则可行。但我更愿意在上下文文件中设置我的模拟。
答案 0 :(得分:0)
您必须像使用anotherTestbean
一样将testBean
声明为弹簧托管bean。
当spring尝试将anotherTestBean
放入TestBean
但春天上下文中没有这样的bean时会发生错误。