У меня есть класс, например
@Setter
@EqualsAndHashCode(of = "id")
@Entity
public class MovieBoxOfficeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
private Long id;
}
, в котором идентификатор генерируется автоматически без ручной настройки.У меня также есть класс с методом
@Entity
@Table(name = "movies")
public class MovieEntity {
List<MovieBoxOffice> boxOffices = new ArrayList<>();
public void addBoxOffice(MovieBoxOffice boxOffice) throws ResourceConflictException {
if (this.boxOffices.contains(boxOffice)) {
throw new ResourceConflictException("A box office with id " + boxOffice.getId() + " is already added");
}
this.boxOffices.add(boxOffice);
}
}
. Есть проблема с тестированием метода addBoxOffice
, потому что сравнение MovieBoxOfficeEntity
объектов выполняется с использованием ID
и ID
генерируется только автоматически при записи в базу данных и не может быть установлен вручную.
Мне пришла в голову идея добавить поле uniqueId
в класс MovieBoxOfficeEntity
и добавить его в аннотацию @EqualsAndHashCode
@Setter
@EqualsAndHashCode(of = {"id", "uniqueId"})
@Entity
public class MovieBoxOfficeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
private Long id;
private String uniqueId = UUID.randomUUID().toString();
}
тогда я могу проверить таким образом
@Test(expected = ResourceConflictException.class)
public void canAddBoxOffice() throws ResourceConflictException{
final String id = UUID.randomUUID().toString();
final MovieBoxOfficeEntity boxOffice = new MovieBoxOfficeEntity();
boxOffice.setUniqueId(id);
this.movieEntity.addBoxOffice(boxOffice);
this.movieEntity.addBoxOffice(boxOffice);
}
таким образом, объект boxOffice
будет иметь
id: null
uniqueId: some generated UUID
, и сравнение объектов будетпровести сравнение uniqueId
.
Что вы думаете о создании поля uniqueId
только для проверки методов сущностей?