Почему данные во время теста, перезатирают данные созданные из скрипта

RunWith(SpringRunner.class)
@SpringBootTest
public class CompanySaveServiceTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(CompanySaveServiceTest.class);

    @Autowired
    private CompanySaveService companySaveService;

    @Autowired
    private CompanyReadService companyReadService;

    @Autowired
    private CompanyMapper companyMapper;

    /*имя метода, который выполняет поиск в базе записи с указанными параметрами,
    * и если запись есть, возвращает true, если записи нет - возвращает False*/
    private static String NAME_METHOD_READ_BY_NAME = "isByName";

    @Sql(scripts = {"/sql/sql-query.sql"})
    @Before
    public void init() {
        LOGGER.info("\nЗаполнение данных!!!!!\n");
    }

    @Modifying(flushAutomatically = true)
    @Test
    public void writeData() {

        Company company = prepareObject();

        CompanyDto companyDto = transform(company);

        this.companySaveService.writeData(companyDto);

        String name = companyDto.getName();

        boolean isCompanyByName = isEntryByName(name);

        Assert.assertTrue("Попытка записи в таблицу, неудалась.", isCompanyByName);

    }

    private CompanyDto transform(Company company) {

           return this.companyMapper.companyToCompanyDto(company);
    }


    /*подготовка объекта для записи*/
    private Company prepareObject() {

        Company company = new Company();
        Company fillData;
        boolean isEntryByName;

        do{
            fillData = fillDataOnly(company);
            String name = fillData.getName();

            isEntryByName = isEntryByName(name);

        } while (isEntryByName);

        fillData.setId(null);

        return fillData;
    }



    /*проверяем по указанному имени, по полю name, нет ли уже записи, с таким именем*/
    private boolean isEntryByName(String name){

        return getByNameReflection(companyReadService, NAME_METHOD_READ_BY_NAME, name);
    }
}

сначала заполняются данные из скрипта, но затем они автоматически вытираются ..???

Затем работает метод помеченный аннотацией @Test и появляется запись, которая формировалась в данном тестовом методе.

Если не использовать

@Modifying(flushAutomatically = true)

тогда по результату работы метода, таблица вообще - пустая ???

Обновление_2

  • При использовании
#Создание базы данных и таблиц, на основе указанных сущностей
spring.jpa.hibernate.ddl-auto=create-drop

В конце сессии Jpa manager , схема удаляется, а точнее все ее таблицы, сама схема остается... Когда тест запускается заново, тогда схема снова создается. Тест нормально работает, но данные можно увидеть в таблице, только когда мы работает в режиме debug в среде разработки..

Данные могут появиться только при запуске теста 2 раза

  • при использовании настройки (указанной ниже), удаляются предыдущие данные и создается новая схема.
#Создание базы данных и таблиц, на основе указанных сущностей
spring.jpa.hibernate.ddl-auto=create

тест сначала работает в старой схеме, затем почему что включается настройка, а при повторном запуске все наооборот.

  • только при использовании
#Создание базы данных и таблиц, на основе указанных сущностей
spring.jpa.hibernate.ddl-auto=update

Данные будут добавляться, не удаляя предыдущии.

Есть какие идеи, почему так происходит и как настроить комфортную работу... ?


Ответы (0 шт):