행복해지고싶은사람
390
2019-06-12 18:09:30
2
65

junit test 실행하면 자꾸 오류가 나네요..


 o.s.c.a.AnnotationConfigApplicationContext - [refresh] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourceHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

o.s.d.r.l.RedisMessageListenerContainer - [stop] Stopped RedisMessageListenerContainer

AnnotationConfigApplicationContext 을 사용하여 bean을 가져오고 처리하고 싶습니다.
그런데 자꾸 RequestMapping 후에 에러나네요.. 
대략 에러를 읽어보면 bean 등록을 실패했다는 내용인데.. 정확히 무엇때문이지 잘 모르겠습니다..
코드는 아래와 같은데 context.refresh()함수에서 에러뜹니다.
왜 이럴까요? 저번주 부터 찾고 있는데 정말 힘드네요.. 아시는 분 알려주시면 감사하겠습니다..

public class TestTest {
     static AnnotationConfigApplicationContext context;
     
     @Before
     public void setUp() throws Exception {
           context = new AnnotationConfigApplicationContext();
           context.register(TestSpringConfig.class);
           context.register(TestDBConfig.class);
           context.refresh();
     }
     @Test
     public void test() {
           AnnotationConfigApplicationContext app2 = new  AnnotationConfigApplicationContext(TestSpringContextConfig.class);
           AAA aaa = (AAA)app2.getBean(AAA.class);
    }
}

0
0
  • 답변 2

  • John Suhr
    308
    2019-06-13 09:18:01 작성 2019-06-13 13:18:10 수정됨

    TestSpringConfig.class, TestDBConfig.class에 HandlerMapping과 같은 Mvc관련된 빈이 있으면 ServletContext(톰캣이 제공하는)객체 의존성을 가지므로 단독 실행에서 예외를 던집니다. 

    java.lang.IllegalStateException: No ServletContext set

    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(classes = {RootConfig.class, WebConfig.class, SecurityConfig.class})
    public class SimpleTestClass {
        // .. 테스트 내용
    }

    @RunwWith로 Spring mvc라는 것을 명시하셔야 합니다...

    1
  • 행복해지고싶은사람
    390
    2019-06-13 14:49:12

    John Suhr

    제가 참고하는 예제에선 @Runwith, @ContextConfiguration 없이도 테스트가 잘되더라구요..

    해보고 영 안되면 말씀해주신대로 Config 등록해야겠습니다.

    감사합니다!

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.