Используя @RunWith (SpringJUnit4ClassRunner.class), вы можете получить доступ к объекту ApplicationContext?

У меня есть тест Spring, который использует:

@RunWith(SpringJUnit4ClassRunner.class)

В отличие от более старого способа тестирования, проходящего из базовых классов Spring, нет очевидного способа доступа к ApplicationContext, который был загружен с помощью Spring, с помощью @ContextConfiguration

Как я могу получить доступ к объекту ApplicationContext из своих методов тестирования?

Спасибо!

Ответ 1

В разделе Тестирование интеграции в документации Spring

@Autowired ApplicationContext

В качестве альтернативы реализации интерфейса ApplicationContextAware вы можете внедрить контекст приложения для своего тестового класса с помощью @Autowired аннотации по методу поля или сеттера. Например:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTest {

  @Autowired
  private ApplicationContext applicationContext;

  // class body...
}

Ответ 2

Добавить атрибут @Autowired ApplicationContext

@Autowired ApplicationContext applicationContext;

Ответ 3

Я использую это:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyClassTest
{
}

и перейдите к пути построения проекта -> Source ->, добавьте местоположение вашего applicationContext.xml

Я использую maven, поэтому applicationContext.xml находится под src/main/resources.

Если вы используете этот метод, у вас может быть несколько applicationContext для тестирования например:

@ContextConfiguration("classpath:applicationContext_Test.xml")

или

@ContextConfiguration("classpath:applicationContext_V01.xml")