#sqlite #functional-testing #micronaut #file-copying #micronaut-test
Вопрос:
В своем приложении я использую базу данных sqlite с именем «сообщение». Чтобы проверить функциональность, я написал функциональный тест. Тестовый вызов контроллера, который выполняет следующие действия:
- удалите все существующие записи (метод проверки перед началом)
- загрузите файл csv (фактическая функциональность, вызываемая контроллером для обслуживания)
- удалите все записи (метод проверки после завершения)
Поскольку это база данных prod, я хочу сохранить фактические данные перед тестовыми запусками, поэтому я использую следующий код:
@BeforeAll
@SneakyThrows
static void backupExistingData(){
Thread.sleep(1000);
Path sourceFile = Path.of("messages_lookup_db/messages.db");
Path targetFile = Path.of("messages_lookup_db/messages_backup.db");
Path target = Files.copy(sourceFile, targetFile,StandardCopyOption.REPLACE_EXISTING);
System.out.println(target.getFileName());
Thread.sleep(1000);
}
@BeforeEach
void setup() {
dao.deleteAll();
}
@AfterEach
void cleanUpDatabase() {
dao.deleteAll();
}
@AfterAll
@SneakyThrows
static void restoreExistingData(){
Thread.sleep(1000);
Path sourceFile = Path.of("messages_lookup_db/messages_backup.db");
Path targetFile = Path.of("messages_lookup_db/messages.db");
Files.move(sourceFile, targetFile, StandardCopyOption.REPLACE_EXISTING);
}
Мой файл DAO выглядит так:
@Repository(value = "messagesdb")
@JdbcRepository(dialect = Dialect.ANSI)
public interface MessageDao extends CrudRepository<MessageEntity, String> {
@Executable
@Retryable
Optional<String> findMessageCodesByCountry(String country);
}
Здесь message.db-это данные prod, поэтому я пытаюсь создать их резервную копию перед началом тестирования, и после завершения всех тестов я перемещаю их в исходное имя базы данных.
но когда я пытаюсь это сделать, я получаю следующую ошибку:
messages_lookup_dbmessages.db: The process cannot access the file because it is being used by another process.
java.nio.file.FileSystemException: messages_lookup_dbmessages.db: The process cannot access the file because it is being used by another process.
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
at java.base/sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:384)
at java.base/sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:292)
at java.base/java.nio.file.Files.move(Files.java:1422)
at com.tesco.MessageFunctionTest.restoreExistingData(MessageFunctionTest.java:58)
Я даже использовал Thread.sleep
, но все равно эта проблема остается постоянной.
Есть ли что-то не так, что я здесь делаю ?
С уважением