Conversation
… в файловый режим
|
|
||
| @Repository | ||
| @Primary | ||
| @Profile("!test") |
There was a problem hiding this comment.
из тз
Вам предстоит реализовать интеграционное тестирование
(англ. integration testing). С помощью него можно проверить
работу приложения с зависимостями — например, с базой данных.
Предполагается, что UserDbStorage будет как раз работать с базой,
стоит его задействовать
Еще у нас две имплементации интерфейса и на обеих стоят аннотации Primary.
В классах, где делаем инджект зависимости через интерфейс UserStorage, можно использовать аннотацию Qualifier, например
@Service
@Slf4j
public class UserService {
private final UserStorage userStorage;
public UserService(@Qualifier("userDbStorage") UserStorage userStorage) {
this.userStorage = userStorage;
}
// ...
}тогда можно без Primary. Но Qualifier будет нужен везде, где инджектим в конструктор UserStorage
There was a problem hiding this comment.
Да тут я все понял, однако столкнулся с проблемой. У нас есть интеграционные тесты которые работают с БД - файл ru/yandex/practicum/filmorate/FilmoRateApplicationTests.java
И есть остальные тесты, которые тестируют отдельно контроллеры на inMemory базах, чтобы их разделить я использовал primary аннотации и профили, чтобы в ручную не переписывать в каждом сервисе конструктор
There was a problem hiding this comment.
Про FilmoRateApplicationTests понимаю,
но в целом реализация, когда на каждой имплементации стоит Primary, выглядит не очень хорошо
и что есть сервисы, которые запускаются только с тестовым профилем в интеграционных тестах. Зачем поддерживать сервисы, которые нужны только для тестов
стоит посоветоваться с наставником
| public Mpa(Long id, String name) { | ||
| this.id = id; | ||
| this.name = name; | ||
| } |
There was a problem hiding this comment.
можно немного оптимизировать
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Mpa {
private Long id;
@NotBlank(message = "Название рейтинга не может быть пустым")
private String name;
}| @NotBlank(message = "Название жанра не может быть пустым") | ||
| private String name; | ||
|
|
||
| public FilmGenre(Long id, String name) { |
There was a problem hiding this comment.
тоже можно создать через AllArgsConstructor
| @Primary | ||
| @Profile("!test") |
| 1L, new Mpa(1L, "PG"), | ||
| 2L, new Mpa(2L, "R-17") |
There was a problem hiding this comment.
предварительно добавленные данные можно убрать
и InMemory классы не использовать в интеграционных тестах
There was a problem hiding this comment.
Добавленные данные необходимы для inMemory хранилищ чтобы смоделировать уже готовую БД с mpa. InMemory классы не используются в интеграционных тестах
| spring.datasource.url= | ||
| spring.datasource.driverClassName= | ||
| spring.datasource.username= | ||
| spring.datasource.password= No newline at end of file |
There was a problem hiding this comment.
Тут стоит профиль "test" он используются для обычных тестов контроллеров. Не для интеграционных тестов и не для прода, там БД нам не нужна, поэтому таким образом я убрал подключение к БД
| @Repository | ||
| @Primary | ||
| @Profile("!test") | ||
| @Repository("UserDbStorage") |
There was a problem hiding this comment.
если явно не указать название, то бин просто будет называться с маленькой буквы "userDbStorage"
Выполнил ТЗ 12 спринта