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

Spring Boot测试-没有“com.example.myservice”类型的合格bean可用

殳阳飙
2023-03-14

关于stackoverflow有很多类似的问题,但我发现没有一个是我的问题。

在Spring Boot2.0.2.Release的集成测试中,我为该测试创建了一个单独的@Configuration类,并在其中定义了beancom.example.myservice。这个bean恰好被com.example.otherbean中的其他一些bean使用。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyIntegrationTestConfig.class},
        webEnvironment = SpringBootTest.WebEnvironment.MOCK)
public class MyService1Test extends MyAbstractServiceIntegrationTest {
@Test
    public void someTest() {}
}

设置和拆分的通用摘要:

public class MyAbstractServiceIntegrationTest{
    @Before
    public void setUp(){}

    @After
    public void tearDown()
}

src/test中的MyIntegrationTestConfig,用于替代src/main中的配置:

@Configuration
@ComponentScan({"com.example"})
public class MyIntegrationTestConfig {
   @Bean
   public MyService myService() {
      return null;
   }
}

myservicebean可以为空,用于测试目的。

@TestConfiguration
static class MyServic1TestContextConfiguration {

    @Bean(name = "MyService")
    public MyService myService() {
        return null;
    }
}

我怀疑Spring在创建src/test文件夹中定义的MyService bean之前,会先在src/main文件夹中创建/autowire bean。会是这样吗?或者bean MyService所在的上下文不同(比如测试上下文),而其他bean所在的上下文不同,无法找到MyService。

一个附带问题:对于集成测试,使用webEnvironment=SpringBootTest.webEnvironment.mock是可以的,对吗?

共有1个答案

汪驰
2023-03-14

问题是如何初始化bean。值null是导致问题的值。这就好像您实际上没有声明该对象的任何实例。要使其正常工作,请声明服务new MyService()的有效实例。

 类似资料: