[英]How to create a mock spring bean for a class having autowired dependencies
假設我有一個名為 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 來實現這一點。 但這不是我想要的解決方案。
我的要求是創建 MainClass 的模擬 bean,而不創建 AutowiredClass 的實際 bean。 請幫助我如何實現這一目標。
正如 Florian 已經評論過的,您應該嘗試創建根本不需要 Spring 的測試,並且您不會遇到這些問題。
但是,如果沒有可能的解決方法,您可以對AutoMockRegistryPostProcessor使用一些魔法。
您只需要將AutoMockRegistryPostProcessor
添加到@ContextConfiguration
,它就會為您缺少的依賴項創建@ContextConfiguration
:
@ContextConfiguration(classes = { AutowiringTest.class, AutoMockRegistryPostProcessor.class })
public class AutowiringTest {
// no complains anymore, a mockito mock will be created for AutoWiredClass
AutoMockRegistryPostProcessor
類不在 maven 中,您需要將其復制到您的項目中。
文檔在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.