使用@SpringBootTest时如何在测试类中自动装配bean

时间:2018-12-17 09:28:37

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

我有一个集成测试类,它带有@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();
        }
    }
}

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

1 个答案:

答案 0 :(得分:1)

为测试类添加ContextConfiguration:

org.apache.poi 4.0.1 version