Почему данные во время теста, перезатирают данные созданные из скрипта
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
Данные будут добавляться, не удаляя предыдущии.
Есть какие идеи, почему так происходит и как настроить комфортную работу... ?