假设我有一个名为MainClass的类。
public class MainClass {
@Autowired
AutoWiredClass autoWiredClass;
}
我正在尝试使用Mockito创建一个MainClass的模拟bean。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class AutowiringTest {
@Configuration
static class AutowiringTestConfiguration{
@Bean
public MainClass mainClass() {
return Mockito.mock(MainClass.class);
}
}
@Autowired
MainClass mainClass;
@Test
public void testBeanCreation(){
assertNotNull(mainClass);
}
}
运行测试用例时出现此错误。
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: autowiring.AutoWiredClass autowiring.MainClass.autoWiredClass; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [autowiring.AutoWiredClass] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我知道我可以使用@Mock和@InjectMocks实现这一目标。但那不是我想要的解决方案。
我的要求是在不创建AutowiredClass的实际bean的情况下创建MainClass的模拟bean。请帮我解决这个问题。
答案 0 :(得分:1)
正如Florian已经评论过的那样,你应该尝试创建完全不需要Spring的测试,你就不会遇到这些问题。
但是,如果没有可行的解决方法,您可以使用AutoMockRegistryPostProcessor的一些魔法。
您只需要将AutoMockRegistryPostProcessor
添加到@ContextConfiguration
,它就会为您缺少的依赖项创建模拟:
@ContextConfiguration(classes = { AutowiringTest.class, AutoMockRegistryPostProcessor.class })
public class AutowiringTest {
// no complains anymore, a mockito mock will be created for AutoWiredClass
AutoMockRegistryPostProcessor
类不在maven中,您需要在项目中复制它。
文件是here。