首页 > 解决方案 > 无法将 main 的 @Configuration 的 @Bean 自动装配到测试 @Component

问题描述

该设置可能看起来很奇怪,因为它是来自多模块项目中的公共模块的代码,因此它在 main 中没有应用程序,但它在测试中以测试可重用组件。它像是:

/src/main/java/my.domain.mypackage.ApplicationConfiguration.java

@Configuration
public class ApplicationConfiguration {
   @Bean
   public MyService myService(){
       return MyService();
   }
}

/src/test/java/TestApplication.java

@SpringBootApplication
public class TestApplication {}

/src/test/java/my.domain.util.TestHelper.java

@Component
public class TestHelper {
    @Autowired
    private MyService myService;
}

/src/test/java/my.domain.mypackage.MyTest.java

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MyTest {
    @Autowired
    private TestHelper testHelper;

    @Test
    public void test(){
       //Do something with testHelper
    }
}

发生的情况是,当测试运行时,它会尝试实例化 TestHelper,并且由于某种原因,ApplicationConfiguration 中的一些依赖项尚不可用(TestHelper 上没有 MyService 类型的合格 bean)。

这可能是什么原因?我已经尝试过使用@Import、@DependsOn,但它不起作用,而且我确信它是我设计中的错误或根本错误

标签: javaspringspring-bootautowired

解决方案


您需要在 ApplicationConfiguration.java 类的顶部添加 @Configuration 注释。


推荐阅读