Экземпляр WebTestClient не видит зависимость контроллера как внедренную - PullRequest
0 голосов
/ 06 октября 2019

Я делаю тестовую конфигурацию. Я удивлен, что все нормально в первом сценарии, но не во втором.

В 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:

Я удивлен, потому что в моем первом сценарии поле PersonneRepository экземпляра PostgressControllerSpringData хорошо введено. Но во-вторых, весна говорит мне, что инъекция не удалась!

1 Ответ

0 голосов
/ 06 октября 2019

DataJpaTest не предназначен для загрузки контроллера и вообще веб-слоя. Будут загружены только компоненты, связанные с базой данных (например, DAO). Это также написано в документации

Может использоваться, когда тест фокусируется только (выделен жирным шрифтом :)) на компонентах JPA.

Если вы хотите загрузить также веб-слой (и, как следствие, иметь возможность вводить контроллеры в тест), рассмотрите возможность использования @SpringBootTest аннотации вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...