【问题标题】:How to autowire beans in test class when using @SpringBootTest使用@SpringBootTest时如何在测试类中自动装配bean
【发布时间】:2019-05-17 15:29:55
【问题描述】:

我有一个带有 @SpringBootTest 注释的集成测试类,它启动完整的应用程序上下文并让我执行我的测试。但是我无法将 @Autowired bean 放入测试类本身。相反,我得到一个错误:

没有可用的“my.package.MyHelper”类型的合格 bean”。

如果我不 @Autowire 我的助手类,而是将代码直接保存在 setUp 函数中,则测试将按预期工作。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Application.class)
public class CacheControlTest {

    @Autowired
    private MyHelper myHelper;

    @Before
    public void setUp() {
        myHelper.doSomeStuff();
    }

    @Test
    public void test1() {
        // My test
    }
}

如何在使用 @SpringBootTest 的同时在测试类中使用 Spring 自动装配?

按照下面的@user7294900 建议,创建一个单独的@Configuration 文件并将其添加到 CacheControlTest 的顶部:

@ContextConfiguration(classes = { CacheControlTestConfiguration.class })

但是,有什么方法可以将配置保存在 CacheControlTest 类本身中?我尝试在我的测试类中添加:

public class CacheControlTest {

    @TestConfiguration
    static class CacheControlTestConfiguration {
        @Bean
        public MyHelper myHelper() {
            return new MyHelper();
        }
    }

}

public class CacheControlTest {

    @Configuration
    static class CacheControlTestConfiguration {
        @Bean
        public MyHelper myHelper() {
            return new MyHelper();
        }
    }
}

但它们似乎没有任何作用。我仍然得到同样的错误。如上所述,当放置在单独的文件中时,相同的配置块仍然有效。

【问题讨论】:

  • 你有MyHelper类型的bean吗?它是在哪里定义的?
  • 该 bean 在 my.helpers 包中的测试类下定义。它在普通应用程序上下文中不可用 - 应该仅在测试上下文中可用
  • 好了 - 你需要定义一个测试 @Configuration 并导入它。
  • 我已经用我尝试过的@Configuration 块更新了这个问题。它们似乎没有效果

标签: java spring spring-boot junit spring-test


【解决方案1】:

为您的测试类添加 ContextConfiguration:

@ContextConfiguration(classes = { CacheControlTestConfiguration.class })

【讨论】:

  • 现代 Spring Boot 不应该需要这项工作 - 嵌套的配置类应该被自动拾取。
  • 如果可能的话,我想将配置保留在测试类本身中。
  • 实际上这是可行的。如果我将配置放在单独的文件中并将这一行添加到我的测试类中,我的测试将按预期工作。但是,有什么方法可以做到这一点,同时将配置保留在测试文件中?
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2021-08-17
  • 2014-11-18
  • 2022-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多