JUnit @BeforeClass нестатическая работа вокруг приложения Spring Boot
Аннотация JUnit @BeforeClass должна быть объявлена статической, если вы хотите, чтобы она выполнялась один раз перед всеми методами @Test. Однако это нельзя использовать с внедрением зависимостей.
Я хочу очистить базу данных, которую я @Autowire с помощью Spring Boot, один раз перед запуском тестов JUnit. Я не могу @Autowire статические поля, поэтому мне нужно подумать о обходе. Есть идеи?
4 ответов:
Просто используйте
@Before(вместо@BeforeClass) (илиBeforeTransaction(в зависимости от способа инициализации базы данных)). Эта аннотация должна быть приложена к нестатическому публичному методу.Конечно:
@Beforeзапускайте перед каждым методом тестового случая (не так, как@BeforeClass, который выполняется только один раз.) Но если вы хотите запустить его ровно один раз, то используйте статическое поле маркера.private static boolean initialized = false; ... @Before public void initializeDB() { if (!initialized) { ... //your db initialization initialized = true; } } ---
Взгляните на библиотеку DBUnit - она предназначена для выполнения действий, которые вы описываете. Он может создавать и разрушать экземпляры баз данных и предоставляет вам простые способы сделать это.
Попробуйте это решение: https://stackoverflow.com/a/46274919/907576 :
С
@BeforeAllMethods/@AfterAllMethodsаннотации вы можете выполнить любой метод в тестовом классе в контексте экземпляра, где доступны все введенные значения.
Хотя принятый ответ умен,кажется избитым. Вы пробовали использовать обычный конструктор?
public class MyJUnitTest { public MyJUnitTest() { // code for initializeDB } // Tests }
Comments