【问题标题】:How to replace bean in BeanFactory with own mock in Spring Boot?如何在 Spring Boot 中用自己的 mock 替换 BeanFactory 中的 bean?
【发布时间】:2018-11-23 13:05:25
【问题描述】:

为了在项目中实现工厂,我使用了 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);

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

谢谢!

【问题讨论】:

  • 您在寻找@MockBean 吗?

标签: java spring spring-boot mocking mockito


【解决方案1】:

只是想想:

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

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

如果你想这样做,那么像这样:

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

    @MockBean
    private ProviderA providerA;

    @MockBean
    private ProviderB providerB;
}

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2014-01-27
    • 2014-05-15
    • 2020-01-15
    • 2013-12-25
    相关资源
    最近更新 更多