要在项目中实现工厂,我使用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);
解决问题的正确方法是什么?
谢谢!
答案 0 :(得分:0)
只需考虑:
但是对于测试,有必要从 BeanFactory并将其替换为自己的模拟实现。
你为什么要这么做? 相反,您将为每个提供程序编写一个单独的单元测试,并根据需要模拟任何IO操作。 您还可以为自己的已实现BeanFactory进行单独的最小测试,以测试getInstance方法。
如果您仍然想这样做,那么类似这样:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProviderTest {
@MockBean
private ProviderA providerA;
@MockBean
private ProviderB providerB;
}
现在amazingProviderFactory.getInstance("some key");
应该返回上面声明的模拟bean。
希望这会有所帮助。