Макет теста Spring и ссылки на объекты несохраненного временного экземпляра - PullRequest
0 голосов
/ 29 мая 2020

Короче говоря, у меня есть сущность, которая ссылается на другую сущность, и у этой сущности есть ссылка ... поэтому, когда я хочу протестировать первую сущность, мне нужно создать еще много связанных сущностей, но я не хочу; ).

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 тестами.

// редактировать: добавить код

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