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

您可以有多个@SpringBootTest类,每个类都有自己内部的@TestConfiguration来定义相同的bean而没有冲突吗?

李法
2023-03-14
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "spring.main.allow-bean-definition-overriding=true")
public class TestA {

    @TestConfiguration
    static class TestConfig {
        @Bean
        @Primary
        public String stringBeans() {
            System.out.println("Creating string bean from Test A");
            return "Test A";
        }
    }

    @Test
    public void testA() {
        System.out.println("Running Test A");
    }
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "spring.main.allow-bean-definition-overriding=true")
public class TestB {

    @Autowired
    String stringBeans;

    @TestConfiguration
    static class TestConfig {
        @Bean
        @Primary
        public String stringBeans() {
            System.out.println("Creating string bean from Test B");
            return "Test B";
        }
    }

    @Test
    public void testB() {
        System.out.println("Running Test B");
        assertThat(stringBeans).isEqualTo("Test B");
    }
}

运行测试B

我尝试创建用@TestConfiguration注释的单独类,并使用@Import将它们拉入每个相应的测试中,但这并不能一致地解决这个问题。

共有1个答案

慕容灿
2023-03-14

我测试了一个Spring Cloud函数,结果发现我在test/resources文件夹中的application.yml中定义了一个组件扫描,它导致两个内部@TestConfiguration类都被评估。因此,您需要特别小心您的测试设置,否则很难跟踪的怪异行为可能会发生。

在这个例子中,我的类都是在com.example.demo和application.yml下定义的,如下所示

spring: 
     cloud:
       function:
         scan:
           packages: com.example.demo

删除此不必要的扫描后,测试按预期运行。

 类似资料:
  • 问题内容: 我做了以下工作,一段时间后出现了stackoverflow错误,我知道为什么会这样。 但是,如果我没有在构造函数中创建新的Cat对象,而是采用Cat类型的参数并将其分配给insideCat字段,该怎么办? 我只是在玩弄代码,只是试图找出Java可以做什么和不能做什么。在第二个代码中,一切看起来都很正常,直到我开始测试该类为止。我需要一个Cat对象来创建Cat对象(要创建这个Cat对象,

  • 这不是如何打开Visual Studio Code的多个实例的副本?。 我之前的问题,如何使Visual Studio Code的自动完成建议更快地显示?解释了我的问题。 我将VSC与PlatformIo插件一起使用了几个月进行嵌入式开发,没有问题。然后我开始使用Flutter / Dart,很快就遇到了自动建议非常慢的问题。 可能是我刚刚加载了一个失败的插件(我正在一个接一个地把它们添加回去,看

  • 我目前有一个firebase项目,定义了多个云功能。每个函数都位于自己的文件夹中,其中包含两个文件:index。js和软件包。json。据我所知,可以将所有这些函数导入索引。在默认函数文件夹中创建js文件并导出它们。然而,这种方法导致在同一个实例上部署所有功能。有没有办法强迫他们在自己的实例上部署?非常感谢。

  • 问题内容: 在Spring 3.0中有一个注释。它允许直接在Java代码中定义Spring bean。在浏览Spring参考时,我发现了使用此批注的两种不同方法-带注释的内部类和没有此注释的内部类。 本节包含以下代码: 在这里我们可以看到一段非常相似的代码,但是现在就在这里: 参考的前一部分包含以下说明: Spring组件中的@Bean方法的处理方式与Spring @Configuration类中

  • 我正在使用java。util。ServiceLoader创建轻量级插件框架。 我目前正在努力解决如何拥有多个具有相同FQN的实现类。我想在类路径上拥有同一个插件的两个副本,并且可以访问META-INF/services目录中给出的两个实现类。 以下是一些简单的eclipse项目,它们说明了我的意思:https://docs.google.com/open?id=0B4MxFm-ACB3IUmswN