簡體   English   中英

如何為具有自動裝配依賴項的類創建模擬 spring bean

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM