Spring启动测试 - 没有'com.example.MyService'类型的限定bean可用

时间:2018-05-29 21:09:11

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

stackoverflow上有很多类似的问题,但我发现没有一个是我的例子。

在我使用Spring boot 2.0.2.RELEASE 的集成测试中,我为测试创建了一个单独的@Configuration类,我在其中定义了bean com.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;
   }
}
为了测试目的,

MyService bean可以为null。

当我运行测试时,我不断收到以下错误:

  

没有'com.example.MyService'类型的限定bean可用:预计至少有1个bean可以作为autowire候选者。依赖注释:{}

我甚至尝试将此内部类添加到MyServic1Test。仍然没有帮助:

@TestConfiguration
static class MyServic1TestContextConfiguration {

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

知道我在这里做错了吗?还是我错过了什么?

我怀疑Spring在src / main文件夹中创建/自动装配bean之前,甚至创建了在src / test文件夹中定义的MyService bean。可能是这样吗?或者是否存在bean MyService所在的不同上下文(如测试上下文),而其他bean则位于其他上下文中,无法找到MyService。

一个侧面问题:对于集成测试,可以使用webEnvironment = SpringBootTest.WebEnvironment.MOCK,对吗?

1 个答案:

答案 0 :(得分:1)

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