9

Аннотации JUnit's @BeforeClass аннотация должна быть объявлена ​​статичной, если вы хотите, чтобы она запускалась один раз перед всеми методами @Test. Однако это не может использоваться с инъекцией зависимостей.JUnit @BeforeClass нестатическая работа для приложения Spring Boot

Я хочу, чтобы очистить базу данных, что я @Autowire с Spring Boot, один раз, прежде чем запускать тесты JUnit. Я не могу ставить поля @Autowire, поэтому мне нужно подумать о работе. Есть идеи?

ответ

17

Просто используйте @Before (вместо @BeforeClass) (или BeforeTransaction (в зависимости от того, как вы инициализируете базу данных)). Эта аннотация должна быть привязана к нестатическиму общественному методу.

Конечно, @Before запускается до КАЖДОГО тестового метода (не как @BeforeClass, который выполняется только один раз.) Но если вы хотите запустить его ровно один раз, используйте поле статического маркера.

private static boolean initialized = false; 
... 
@Before 
public void initializeDB() { 
    if (!initialized) { 
     ... //your db initialization 
     initialized = true; 
    } 
} 
--- 
+0

Ahh ok, это просто и имеет смысл. – Kingamere

+0

вот что я делаю, когда мне нужно использовать JUnit. Но я предпочитаю использовать TestNG, который имеет все аннотации, доступные для нестатических методов: в вашем случае с TestNG, @BeforeClass будет определяться по нестационарным методам и будет выполняться один раз перед всеми методами тестирования внутри этого класса. –

0

Посмотрите библиотеку DBUnit - она ​​предназначена для выполнения действий, которые вы описываете. Он может создать & срывать экземпляры базы данных и предоставляет вам простые способы сделать это.

0

Попробуйте это решение: https://stackoverflow.com/a/46274919/907576:

с @BeforeAllMethods/@AfterAllMethods аннотаций можно выполнить любой метод в классе Test в контексте экземпляра, где все введенные значения доступны.

Смежные вопросы