当前位置: 首页 > 知识库问答 >
问题:

SpringJUnit4ClassRunner测试的配置与SpringBootTest冲突

孔棋
2023-03-14

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

最近,我重构了一个测试,在这个测试中,我想要一个更小的范围(它是关于camunda的进程复盖率)到@RunWith(SpringJunit4ClassRunner.class)。因为这意味着没有上下文是自动加载的,所以我用静态内部类配置“手动”创建了一些bean。整个测试如下所示:

@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
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重写,因为我的mock bean可能会重写自动创建的bean(我已经尝试过了)。

我该如何规避?我希望我的SpringJUnit4ClassRunner-test及其内部配置不影响我的其他@SpringBootTest-test。我已经尝试过使用@conditionalonmissingBean使配置bean具有条件性,但这并不奏效。

共有1个答案

漆雕博
2023-03-14

这些内部配置类不应该用@configuration进行注释。删除注释可以使手工bean生成仍然有效,并且ComponentScan不再拾取配置。

 类似资料:
  • 问题内容: 突然在JUnit测试期间这种情况一直发生。一切正常,我编写了一些新测试,并且发生了此错误。如果我还原它,它不会消失。这是为什么? 问题答案: 您(直接或间接)编写的新测试使用 使用Log4j记录的类 。 需要配置Log4J才能使此日志正常运行。 将 log4j.properties (或log4j.xml)文件放在 测试类路径 的 根目录中 。 它应该具有一些基本配置,例如 默认情况下

  • 我有一个测试套件: 一类: B类: 现在的问题是位于下, 和 类正在。如果我评论带有测试服运行正常,但未注释,我得到: java.lang.非法状态异常: 无法加载应用程序上下文 在org . spring framework . test . context . cache . defaultcacheawarecontextloaderdelegate . load context(defau

  • 我有一个SpringBootTest集成测试,用于我正在开发的某个框架,该框架使用与SpringBootApplication内置的jpa。我添加了支持在没有jpa的情况下使用框架,为此我需要创建一个不使用jpa的不同的SpringBootApplication。 现在,单独运行时的测试类工作得很好,但是当我一起运行它时(运行不同Spring应用程序的不同测试类),第二顺序测试类失败,因为我似乎没

  • DAO类的相关方面如下 我的src/test/resources/application.properties文件如下所示 在Eclipse中作为JUnit测试运行的跟踪 应用程序结构 -SRC ----application.java ----COM ----Hitstpa ----application.properties --测试 ---爪哇

  • 我们有一个库,为了自动配置库,我们使用spring.factories文件(),它提供了自动配置我的库的类。 参考资料 : https://docs.spring.io/spring-boot/docs/1.4.0.M3/reference/htmlsingle/#boot-features-custom-starter 我在spring.factories文件中有以下配置: 我的理解是sprin

  • 这是一个很好的例子来解决这个问题。 但是当我在应用程序上下文中遇到相同的问题但没有这些应答器时: 使用注释解决了所有问题,但在我的示例中,我们没有使用允许使用注释的应答器。 我搜索了很多,发现有人在bean声明中谈论属性,我需要更多关于它的解释。