我做一些测试配置。我很惊讶在第一种情况下一切都很好,但是在第二种情况下却没有。
@RestController
@RequestMapping("/v1")
public class PostgressControllerSpringData {
@Resource
PersonneRepository personneRepository;
@GetMapping("/persist")
public ResponseEntity<String> persistOne() {
Personne p = new Personne();
personneRepository.save(p);
return new ResponseEntity<String>("persistence ok", HttpStatus.ACCEPTED);
}
@TestConfiguration
public class ServiceConfiguration {
@Bean
public PostgressControllerSpringData getBean() {
return new PostgressControllerSpringData();
}
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class SCRIntegrationTest {
@Autowired
private PostgressControllerSpringData myController;
@Autowired
PersonneRepository dao;
@Test
public void m() {
myController.persistOne();
assertEquals(1, dao.findAll().size());
// here, my test is successful
==>一切都很好。
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class SCRIntegrationTest {
@Autowired
private PostgressControllerSpringData myController;
@Autowired
PersonneRepository dao;
@Test
public void m() {
WebTestClient testClient = WebTestClient.bindToController(myController).build();
==>代码随消息而停止
注入资源依赖项失败; 没有可用的PersonneRepository类型的合格Bean:
我很惊讶,因为在第一种情况下,
实例PersonneRepository
的字段PostgressControllerSpringData
注入良好。但是第二次,Spring告诉我注射失败!
答案 0 :(得分:0)
DataJpaTest
不用于加载控制器,也不用于一般Web层。仅与数据库相关的bean(如DAO)将被加载。
这也是用documentation
仅当测试将重点放在JPA组件上时才可以使用。
如果您还希望加载网络层(因此能够将控制器注入测试中),请考虑使用@SpringBootTest
批注