В моем коде тестирования у меня должна быть пустая/пустая база данных в каждом методе. Есть ли код, который достиг бы этого, для вызова в @Before теста?
На самом деле вы всегда можете использовать JPQL,
em
.createQuery("DELETE FROM MyEntity m")
.executeUpdate()
;
Но обратите внимание, нет никаких гарантий, что кэш сущностей также будет очищен. Но для целей юнит-тестирования это выглядит как хорошее решение.
В моем тестовом коде мне нужно, чтобы в каждом методе была пустая/пустая база данных.
Я бы запускал тестовые методы внутри транзакции (и откатывался в конце каждого метода). Это обычный подход. Я не вижу смысла в фиксации транзакции и записи данных в базу данных, если сразу после этого вы их удалите. Просто не фиксируйте.
Альтернативой (не исключительной) может быть использование DbUnit для приведения базы данных в известное состояние перед выполнением теста. При этом обычно не требуется ее очистка.
Другим вариантом может быть использование необработанного JDBC для сброса базы данных, если она существует, а затем JPA воссоздает всю базу данных. Однако это будет довольно медленно.