首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置SpringJUnit4ClassRunner测试与SpringBootTest的冲突

配置SpringJUnit4ClassRunner测试与SpringBootTest的冲突
EN

Stack Overflow用户
提问于 2019-08-29 16:10:02
回答 1查看 353关注 0票数 1

我的项目中有一堆测试,它们都是用@SpringBootTest注释的,因此加载了一个SpringBoot上下文。

最近我重构了一个测试,其中我想要一个更小的范围(它是关于camunda的进程复盖)到@RunWith(SpringJUnit4ClassRunner.class)。由于这意味着不会自动加载任何上下文,因此我使用静态内部类配置“手动”创建了一些bean。整个测试看起来像这样:

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        ExternalConfiguration.class, MyTest.InternalConfiguration.class
})
public class MyTest{

    @Autowired
    private SomeBean someInternalBean;

    @Configuration
    public static class InternalConfiguration{

        @Bean
        SomeBean someInternalBean() {
            return mock(SomeBean .class);
        }

    }
    //Tests

现在,当我运行该测试时,它运行得很好。但是当我运行任何其他测试(那些仍然用@SpringBootTest注解的测试)时,我在加载ApplicationContext时遇到问题:

代码语言:javascript
复制
The bean 'someInternalBean', defined in class path resource [.../MyTest$InternalConfiguration.class], could not be registered. A bean with that name has already been defined in file [.../SomeBean.class] and overriding is disabled.

显然,在加载组件时会创建一个bean,因为该类使用@ ApplicationContext进行了注释,并且上下文加载器尝试从我的内部配置创建另一个bean。

我不能允许bean覆盖,因为我的模拟bean可能会覆盖自动创建的bean(它们确实会覆盖,我已经尝试过了)。

我该如何规避这个问题呢?我希望我的SpringJUnit4ClassRunner-test及其内部配置不会影响其他@SpringBootTest-test。我已经尝试使用@ConditionalOnMissingBean使配置bean具有条件,但这不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 16:50:28

原来这些内部配置类不应该用@Configuration注解。删除注释可以使手动bean生成仍然有效,并且配置不再由componentScan拾取。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57705827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档