WebTestClient实例未看到注入的Controller依赖项

时间:2019-10-06 12:24:08

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

我做一些测试配置。我很惊讶在第一种情况下一切都很好,但是在第二种情况下却没有。

在scr / main / java中,我得到了这个控制器

@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);
    }

在scr / main / test中,我得到了这个配置类

@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告诉我注射失败!

1 个答案:

答案 0 :(得分:0)

DataJpaTest不用于加载控制器,也不用于一般Web层。仅与数据库相关的bean(如DAO)将被加载。 这也是用documentation

编写的
  
    

仅当测试将重点放在JPA组件上时才可以使用。

  

如果您还希望加载网络层(因此能够将控制器注入测试中),请考虑使用@SpringBootTest批注