programing

@RunWith 및 @ContextConfiguration으로 주석이 달린 jUnit 테스트에서 Spring 컨텍스트에 액세스하는 방법은 무엇입니까?

sourcejob 2023. 10. 6. 21:03
반응형

@RunWith 및 @ContextConfiguration으로 주석이 달린 jUnit 테스트에서 Spring 컨텍스트에 액세스하는 방법은 무엇입니까?

나는 다음 시험 수업이 있습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {

  @Autowired
  MyService service;
...

}

접근이 가능한가요?services-test-config.xml그런 방법 중 하나로 계획적으로?좋아요:

ApplicationContext ctx = somehowGetContext();

이것도 잘 작동합니다.

@Autowired
ApplicationContext context;

테스트도 Spring bean처럼 인스턴스화되므로 ApplicationContextAware 인터페이스를 구현하기만 하면 됩니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest implements ApplicationContextAware
{

  @Autowired
  MyService service;
...
    @Override
    public void setApplicationContext(ApplicationContext context)
            throws BeansException
    {
        // Do something with the context here
    }
}

xml 이외의 필요에 대해서는 다음을 수행할 수도 있습니다.

@RunWith(SpringJUnit4ClassRunner.class)
/* must provide some "root" for the app-context, use unit-test file name to the context is empty */
@ContextConfiguration(classes = MyUnitTestClass.class)
public class MyUnitTestClass implements ApplicationContextAware {

테스트 클래스가 Spring Junit 클래스를 확장하는 경우
(예:AbstractTransactionalJUnit4SpringContextTests다른 부류로 확대될 수 있습니다.AbstractSpringContextTests), 에 전화를 걸어 앱 컨텍스트에 접근할 수 있습니다.getContext()방법.
패키지 org.springframework.test에 대한 javadocs를 확인합니다.

다음과 같은 예를 주입하는 것이 가능합니다.ApplicationContext을 사용하여 수업을 하다SpringClassRule그리고.SpringMethodRule규칙. 스프링이 아닌 다른 러너를 사용하고 싶다면 매우 편리할 것입니다.예는 다음과 같습니다.

@ContextConfiguration(classes = BeanConfiguration.class)
public static class SpringRuleUsage {

    @ClassRule
    public static final SpringClassRule springClassRule = new SpringClassRule();

    @Rule
    public final SpringMethodRule springMethodRule = new SpringMethodRule();

    @Autowired
    private ApplicationContext context;

    @Test
    public void shouldInjectContext() {
    }
}

이 문제와 관련된 게시물을 하나 작성했는데, 이것은 자신감을 얻는 데 정말 도움이 됩니다.

자세한 내용을 보려면 이 링크를 사용해 보십시오.

@Test
void TestBeanLaunch()
{
    context.run(it -> {
        /*
         * I can use assertThat to assert on the context
         * and check if the @Bean configured is present
         * (and unique)
         */
        assertThat(it).hasSingleBean(PracticeApplication.class);
        assertThat(it).hasSingleBean(PracticeApplication.TestBean.class);
        assertThat(it.getBean("BeanTest")).isInstanceOf(PracticeApplication.TestBean.class);
    });
} 

언급URL : https://stackoverflow.com/questions/2425015/how-to-access-spring-context-in-junit-tests-annotated-with-runwith-and-context

반응형