java - 如何在Spring Boot中用自己的mock替换BeanFactory中的bean?

标签 java spring spring-boot mocking mockito

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

相关文章:

java - 在运行时在 android 中更改所有屏幕方向

java - 流启动后 Spark Stream 新作业

java - SpringBoot数据库嵌入式数据库驱动JAVA异常

java - Spring,使用@Configuration 和@Bean 注解

java - Spring MVC - 对Tomcat中应用程序的所有请求在war打包后导致错误404

java - 恢复到 svn 中的修订版本

spring - 使用 LettuceConnectionFactory 向 Spring Data Redis 添加压缩

java - Spring MVC 多文件上传与 HTML5 多文件表单功能

java - Spring Boot JPA 存储库类的 Byte Buddy 运行时生成

java - 如何确保 @ExceptionHandler(Exception.class) 在 Spring Boot 中最后被调用?