繁体   English   中英

如何在Spring Boot中用自己的模拟替换BeanFactory中的bean?

[英]How to replace bean in BeanFactory with own mock in Spring Boot?

为了在项目中实现工厂,我使用了Spring的BeanFactory 因此,所需provider的提取如下:

@Override
    public T getInstance(String key) {
        // ...
        return beanFactory.getBean(registry.get(key));
}

因此,我可以按以下方式提取提供程序:

amazingProviderFactory.getInstance("some key");

工作正常。 但是对于测试,有必要从BeanFactory提取提供程序并将其替换为自己的模拟实现。

以下方法可以解决问题,但这只是Internet上的一个示例,还不清楚如何正确实现它:

Mockito.when(SpringContext.getBean("some key")).thenReturn(mockedProvider);

解决问题的正确方法是什么?

谢谢!

考虑一下:

但是对于测试,有必要从BeanFactory中提取提供程序并将其替换为自己的模拟实现。

你为什么要这么做? 相反,您将为每个提供程序编写一个单独的单元测试,并根据需要模拟任何IO操作。 您还可以为自己的实现BeanFactory进行单独的最小测试,以测试getInstance方法。

仍然,如果您要执行此操作,则如下所示:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProviderTest {

    @MockBean
    private ProviderA providerA;

    @MockBean
    private ProviderB providerB;
}

现在amazingProviderFactory.getInstance("some key"); 应该返回上面声明的模拟bean。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM