为了在项目中实现工厂,我使用了Spring的BeanFactory
。因此,所需provider
的提取如下:
@Override
public T getInstance(String key) {
// ...
return beanFactory.getBean(registry.get(key));
}
因此,我可以按如下方式提取提供程序:
amazingProviderFactory.getInstance("some key");
效果很好。但对于测试,有必要从 BeanFactory 中提取提供程序并将其替换为自己的模拟实现。
下面的方法可以解决问题,但这只是网上找到的一个例子,不太清楚如何正确实现:
Mockito.when(SpringContext.getBean("some key")).thenReturn(mockedProvider);
解决问题的正确方法是什么?
谢谢!
最佳答案
只是想:
But for tests, it is necessary to extract a provider from the BeanFactory and replace it with own mocked-implementation.
你为什么要这么做? 相反,您可以为每个提供程序编写单独的单元测试,并根据需要模拟任何 IO 操作。 您还可以为您自己实现的 BeanFactory 进行单独的最小测试,以测试 getInstance 方法。
如果你想这样做,那么像这样:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProviderTest {
@MockBean
private ProviderA providerA;
@MockBean
private ProviderB providerB;
}
现在 amazingProviderFactory.getInstance("some key");
应该返回上面声明的模拟 bean。
希望这有帮助。
关于java - 如何在Spring Boot中用自己的mock替换BeanFactory中的bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447260/