Как загрузить контекст приложения Один раз для нескольких тестовых классов

У меня есть два тестовых класса

public class Test_1 {

    @Autowired
    private Gson gson;

    @Test 
    public void test_1_1 () {
        assertNotNull(gson);
    }
}

public class Test_2 {

    @Autowired
    private Gson gson;

    @Test 
    public void test_2_1 () {
        assertNotNull(gson);
    }
}

Оба требуют весеннего контекста приложения. Но вместо того, чтобы давать @RnWith(SpringRunner.class) и @ContextConfiguration(classes = {Config.class)}) для обоих классов, я хочу один раз инициализировать контекст приложения. И в то же время я должен иметь возможность запускать одиночный (любой тест через eclipse) тест. Это возможно.

Прошел через это: набор тестов внутри контекста Spring. но он загружает контекст приложения, но недоступен в Test_1 или Test_2 (gson имеет значение null).


person pvjhs    schedule 15.04.2018    source источник
comment
Возможный дубликат Повторное использование контекста приложения Spring в тестовых классах junit   -  person best wishes    schedule 15.04.2018


Ответы (1)


Да, это вполне возможно. Все, что вам нужно сделать, это использовать тот же атрибут местоположения в ваших тестовых классах:

@ContextConfiguration(locations = "classpath:test-context.xml") Spring кэширует контексты приложений по атрибуту location, поэтому, если одни и те же местоположения появляются во второй раз, Spring использует тот же контекст, а не создает новый.

Я написал статью об этой функции: Ускорение интеграционных тестов Spring. Также это подробно описано в документации Spring: 9.3.2.1 Управление контекстом и кэширование.

Это имеет интересное значение. Поскольку Spring не знает, когда JUnit завершится, он навсегда кэширует весь контекст и закрывает их с помощью ловушки отключения JVM. Такое поведение (особенно при наличии большого количества тестовых классов в разных местах) может привести к чрезмерному использованию памяти, утечкам памяти и т. д. Еще одно преимущество кэширования контекста.

источник этого ответа

person best wishes    schedule 15.04.2018