Короче говоря, у меня есть сущность, которая ссылается на другую сущность, и у этой сущности есть ссылка ... поэтому, когда я хочу протестировать первую сущность, мне нужно создать еще много связанных сущностей, но я не хочу; ).
public class Instruction {
@ManyToOne
private Model model;
@ManyToOne
private Color color;
private boolean isActive;
}
public class Model {
@ManyToOne
private Type type;
}
public class Type {
@ManyToOne
private Country country;
}
...
Другая вещь, которую я действительно не хочу делать, - это изменять сущности / каскады только для тестового примера. Я пытался имитировать «основной» объект с помощью Podam (uk.co.jemos.podam.api.PodamFactory), но потом у меня возникла ошибка IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
, потому что связанные объекты не сохраняются.
Тестовый код (. groovy):
import uk.co.jemos.podam.api.PodamFactory
class Test {
private final PodamFactory podamFactory = PodamCustomFactory.getInstance()
def "test instruction deactivation"(){
given:
def instruction = podamFactory.manufacturePojo(Instruction.class)
instruction.isActive == true
instructionRepo.saveAndFlush(instruction) // error on that line
def color = new Color()
color.status = "NEW"
colorRepo.saveAndFlush(color)
dto.status = "CANCELLED"
when:
someModel.changeFromOutside(entityOneChange)
then:
newInstruciton = instructionRepo.findById(instruction.id)
!newInstruciton.isActive
}
}
Упрощенная модель:
public class SomeModel {
public void changeFromOutside(Color color, changesDto dto) {
if (!color.getStatus().equals(dto.getStatus())){
oneEventPublisher.publishInstructionDeactivation(color);
}
...
}
}
Есть ли обходной путь для этого или другого способа имитации сущности без создания ссылочных объектов?
Использование Spring с groovy тестами.
// редактировать: добавить код