Как правильно протестировать Spring Controllers, которые получают параметры с DomainClassConverter? - PullRequest
0 голосов
/ 26 июня 2019

Я большой на чистых хорошо изолированных модульных тестах.Но я натыкаюсь на «чистую» часть здесь для тестирования контроллера, который использует функцию DomainClassConverter для получения сущностей в качестве параметров для своих отображенных методов.

@Entity
class MyEntity {
    @Id
    private Integer id;
    // rest of properties goes here.
}

Контроллер определен так

@RequestMapping("/api/v1/myentities")
class MyEntitiesController {
    @Autowired
    private DoSomethingService aService;

    @PostMapping("/{id}")
    public ResponseEntity<MyEntity> update(@PathVariable("id")Optional<MyEntity> myEntity) {
        // do what is needed here
    }
}

Итак, из документации DomainClassConverter small Я знаю, что для поиска сущностей используется CrudRepository#findById.То, что я хотел бы знать, - как я могу издеваться над этим в тесте.Я добился определенного успеха, выполнив следующие действия:

  1. Создайте пользовательский конвертер / форматтер, который я могу смоделировать
  2. Создайте свой собственный MockMvc с указанным выше конвертером
  3. сброс макетаи изменяйте поведение в каждом тесте.

Проблема в том, что установочный код сложен и, следовательно, сложен в отладке и объяснении (моя команда на 99% состоит из младших ребят из рельсов или универов, поэтому мы должны продолжатьвсе просто).Мне было интересно, есть ли способ внедрить нужные MyEntity экземпляры из моего модульного теста, продолжая тестирование с использованием @Autowired MockMvc.

В настоящее время я пытаюсь выяснить, могу ли я внедритьмакет CrudRepository для MyEntity, но безуспешно.Я не работал в Spring / Java в течение нескольких лет (4), поэтому мои знания о доступных инструментах могут не соответствовать современным требованиям.

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