JUnit @BeforeClass нестатическая работа вокруг приложения Spring Boot



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



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

652   4  

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

    Ничего не найдено.