Почему Spring @Autowired ApplicationContext имеет значение null в интеграционном тесте? - PullRequest
0 голосов
/ 05 августа 2020

Я все еще новичок в Spring и смотрел похожие вопросы в стеке, но не мог определить ответ из того, что я прочитал.

Я получаю NPE, когда вызываю свою переменную applicationContext , что означает, что компонент не должен быть создан или внедрен правильно. Вот соответствующая часть моей программы.

@SpringBootTest
@ContextConfiguration(classes = TestConfig.class)
public class SampleIT {

    @Autowired
    private ApplicationContext applicationContext;

    @Test
    public void sampleMethod() throws Exception {

        //NPE below
        String[] allBeanNames = applicationContext.getBeanDefinitionNames();

        //more logic 

Я пытаюсь получить экземпляр ApplicationContext для отладки, почему другие bean-компоненты имеют значение NULL из моей конфигурации, поэтому все это должно быть из-за базового c недостаток в моем понимании того, как настраивается ApplicationContext и вводятся bean-компоненты из него. Любая помощь очень ценится!

Ответы [ 3 ]

5 голосов
/ 05 августа 2020

Попробуйте добавить к вашему классу следующую аннотацию SampleIT:

@RunWith(SpringRunner.class)
1 голос
/ 05 августа 2020

Если вы используете Junit в версии 4, вы должны использовать @RunWith (SpringRunner.class), если вы используете Junit версии 5, вы должны использовать @ExtendWith (SpringExtension.class).

Кроме того, если вы используете Mockito, вы можете использовать @ExtendWith (MockitoExtension.class) et c.

Я настоятельно рекомендую прочитать документацию об аннотации @SpringBootTest по этой ссылке @ SpringBootTest

0 голосов
/ 05 августа 2020

Отвечаю сейчас на свой вопрос. Импорт org.junit.jupiter.api.Test вместо org.junit.Test приведет к использованию Junit5. Это позволит Junit работать со Spring без аннотации @RunWith(SpringRunner.class). В кодовой базе, над которой я работаю, все еще остались остатки Junit4, так что это быстрое исправление, прежде чем полностью перейти на Junit 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...