我正在尝试禁用真正的Mongo连接,并在测试中用Fongo mock替换它。
这是我的测试类:
@SpringBootTest
@RunWith(SpringRunner.class)
public class ControllerTest {
@Autowired
private WebApplicationContext wac;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private MyService service;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void performTest() throws Exception {
... logic ...
}
}
它工作正常,除非我尝试添加我的配置文件更改此行:
@SpringBootTest
到此:
@SpringBootTest(classes = TestConfig.class)
配置类本身:
@Configuration
@ComponentScan
@EnableMongoRepositories
public class TestConfig extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
return "FongoDB";
}
@Override
public Mongo mongo() {
return new Fongo(getDatabaseName()).getMongo();
}
}
然后应用程序无法找到bean并抛出下一个异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.fasterxml.jackson.databind.ObjectMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
... 28 more
如何修复它并正确应用其他配置?
答案 0 :(得分:0)
尝试使用
而不是 @SpringBootTest(classes = TestConfig.class)
答案 1 :(得分:0)
保留@SpringBootTest,然后使用@TestConfiguration和以下类中的bean创建一个类:
<div className="panel-body">
根据javadoc:可用于定义测试的其他bean或自定义的配置。与常规Configuration类不同,使用TestConfiguration 不会阻止自动检测SpringBootConfiguration 。