Spring 引导测试 - 没有可用类型 'com.example.MyService' 的合格 bean
Spring boot test - No qualifying bean of type 'com.example.MyService' available
Whosebug 上有很多类似的问题,但我发现 none 是我的情况。
在我使用 Spring boot 2.0.2.RELEASE 的集成测试中,我为测试创建了一个单独的 @Configuration class确实定义了 bean com.example.MyService
。这个 bean 恰好被 com.example.OtherBean
中的某个其他 bean 使用。
代码如下:
测试class:
@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。
当我运行测试时,我不断收到以下错误:
No qualifying bean of type 'com.example.MyService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
我什至尝试将这个内部 class 添加到 MyServic1Test。仍然没有帮助:
@TestConfiguration
static class MyServic1TestContextConfiguration {
@Bean(name = "MyService")
public MyService myService() {
return null;
}
}
知道我在这里做错了什么吗?还是我错过了什么?
我怀疑 Spring 在创建 src/test 文件夹中定义的 MyService bean 之前首先尝试 create/autowire src/main 文件夹中的 bean。难道是这样吗?或者是否存在 bean MyService 所在的不同上下文(如测试上下文),而其他 bean 位于其他上下文中并且无法找到 MyService。
附带问题:对于集成测试,使用webEnvironment = SpringBootTest.WebEnvironment.MOCK就可以了,对吗?
问题在于您如何初始化 bean。值 null
是导致问题的原因。就好像您实际上没有声明该对象的任何实例一样。要使其工作,请声明服务的有效实例 new MyService()
.
Whosebug 上有很多类似的问题,但我发现 none 是我的情况。
在我使用 Spring boot 2.0.2.RELEASE 的集成测试中,我为测试创建了一个单独的 @Configuration class确实定义了 bean com.example.MyService
。这个 bean 恰好被 com.example.OtherBean
中的某个其他 bean 使用。
代码如下:
测试class:
@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。
当我运行测试时,我不断收到以下错误:
No qualifying bean of type 'com.example.MyService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
我什至尝试将这个内部 class 添加到 MyServic1Test。仍然没有帮助:
@TestConfiguration
static class MyServic1TestContextConfiguration {
@Bean(name = "MyService")
public MyService myService() {
return null;
}
}
知道我在这里做错了什么吗?还是我错过了什么?
我怀疑 Spring 在创建 src/test 文件夹中定义的 MyService bean 之前首先尝试 create/autowire src/main 文件夹中的 bean。难道是这样吗?或者是否存在 bean MyService 所在的不同上下文(如测试上下文),而其他 bean 位于其他上下文中并且无法找到 MyService。
附带问题:对于集成测试,使用webEnvironment = SpringBootTest.WebEnvironment.MOCK就可以了,对吗?
问题在于您如何初始化 bean。值 null
是导致问题的原因。就好像您实际上没有声明该对象的任何实例一样。要使其工作,请声明服务的有效实例 new MyService()
.