【问题标题】:something wrong with SpringbootTest MockBean errorSpringbootTest MockBean 错误有什么问题
【发布时间】:2022-01-04 06:49:43
【问题描述】:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = JeecgSystemApplication.class)
public class SampleTest {
    
    @MockBean
    private CodeGenerateDbConfig initCodeGenerateDbConfig;

}
@Configuration
public class CodeGenerateDbConfig {
    
    @Bean
    public CodeGenerateDbConfig initCodeGenerateDbConfig() {
        if(StringUtils.isNotBlank(url)){
            CodegenDatasourceConfig.initDbConfig(driverClassName,url, username, password);
        }
        return null;
    }
}

错误是:

Caused by: java.lang.IllegalStateException: Unable to register mock bean org.jeecg.config.init.CodeGenerateDbConfig expected a single matching bean to replace but found [codeGenerateDbConfig, initCodeGenerateDbConfig]

【问题讨论】:

  • 这不是错误,是缺少一些配置。您的模拟不知道您要模拟哪种类型的 bean。自从我使用这种类型的嘲笑以来已经有一段时间了,但我猜使用 Qualifier 将能够在这里提供帮助
  • 错误正确地描述了问题。根据您的配置,您的测试类无法找到唯一的 bean,因为 initCodeGenerateDbConfig 和 CodeGenerateDbConfig 都是相同的 bean。我认为使用@Qualifier 可以解决问题。
  • 你的@Configuration 是一个CodeGenerateDbConfig 然后你滥用/滥用@Bean 方法来做一些初始化,它也返回一个CodeGenerateDbConfig。放弃 @Bean 方法并将代码放入 @PostConstruct 方法中。

标签: java spring-boot junit4


【解决方案1】:

MockBean好像不支持,所以必须手动指定

手动指定类型注入正常启动。

@MockBean(classes = {CodeGenerateDbConfig .class})

您要手动指定要注入的类型吗?

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2011-02-22
    相关资源
    最近更新 更多