Я большой на чистых хорошо изолированных модульных тестах.Но я натыкаюсь на «чистую» часть здесь для тестирования контроллера, который использует функцию 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
.То, что я хотел бы знать, - как я могу издеваться над этим в тесте.Я добился определенного успеха, выполнив следующие действия:
- Создайте пользовательский конвертер / форматтер, который я могу смоделировать
- Создайте свой собственный MockMvc с указанным выше конвертером
- сброс макетаи изменяйте поведение в каждом тесте.
Проблема в том, что установочный код сложен и, следовательно, сложен в отладке и объяснении (моя команда на 99% состоит из младших ребят из рельсов или универов, поэтому мы должны продолжатьвсе просто).Мне было интересно, есть ли способ внедрить нужные MyEntity
экземпляры из моего модульного теста, продолжая тестирование с использованием @Autowired
MockMvc
.
В настоящее время я пытаюсь выяснить, могу ли я внедритьмакет CrudRepository
для MyEntity
, но безуспешно.Я не работал в Spring / Java в течение нескольких лет (4), поэтому мои знания о доступных инструментах могут не соответствовать современным требованиям.