복붙노트

[SPRING] 어떻게 사용자 정의 WebApplicationInitializer를 사용하여 테스트를 실행합니까?

SPRING

어떻게 사용자 정의 WebApplicationInitializer를 사용하여 테스트를 실행합니까?

class MyWebAppInitializer extends WebApplicationInitializer {
  def onStartup(servletContext: ServletContext): Unit = {
      ...
  }
}

@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[MyConfig]),
    initializers=Array(classOf[MyWebAppInitializer]))     // <<< ERROR
class MyTest {
  ...
}

불만 사항 :

annotation argument needs to be a constant; found: classOf[MyWebAppInitializer] 

업데이트 : @M. Deinum은 여기서 ApplicationContextInitializers 만 허용된다는 점을 지적합니다. 따라서 오류는 잘못보고 된 유형의 오류입니다.

그렇다면 ... MyWebAppInitializer를 순서대로 사용하고 정의 된 기능을 테스트하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.컨텍스트 구성에서 컨텍스트 로더가 나열되지는 않습니다. AnnotationConfigWebContextLoader는 클래스 패스에 WebApplicationInitializer의 인스턴스를 배치합니다.이 클래스를 추가하고 초기화 도구를 제거하면 (WebApplicationInitializers가 아닌 ApplicationContextInitializers의 경우), 모든 설정이 완료됩니다.

    컨텍스트 구성에서 컨텍스트 로더가 나열되지는 않습니다. AnnotationConfigWebContextLoader는 클래스 패스에 WebApplicationInitializer의 인스턴스를 배치합니다.이 클래스를 추가하고 초기화 도구를 제거하면 (WebApplicationInitializers가 아닌 ApplicationContextInitializers의 경우), 모든 설정이 완료됩니다.

    @RunWith(classOf[SpringJUnit4ClassRunner])
    @WebAppConfiguration
    @ContextConfiguration(classes = {ConfigClass.class, AnotherConfigClass.class}, loader=AnnotationConfigWebContextLoader.class))
    class MyTest {
    ...
    

    다음은 실제 예제입니다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(classes={WebConfiguration.class, SecurityConfig.class}, loader=AnnotationConfigWebContextLoader.class)
    @ActiveProfiles("dev")
    public class AppTests {
        private MockMvc mockMvc;
    
        @Autowired
        protected WebApplicationContext webApplicationContext;
    
        @Before
        public void setup() {
            mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
        }
    
        @Test
        public void simple() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.get("/"))
                    .andExpect(MockMvcResultMatchers.status().isOk())
                    .andExpect(MockMvcResultMatchers.view().name("index"));
        }
    }
    
  2. ==============================

    2.대답은 "죄송합니다, 할 수 없습니다"입니다. 당신은 이것을 참조 할 수 있습니다 : Spring FrameworkSPR-10199 Spring 웹 애플리케이션 테스트를 위해 WebApplicationInitializer를 사용할 수있는 기능 추가

    대답은 "죄송합니다, 할 수 없습니다"입니다. 당신은 이것을 참조 할 수 있습니다 : Spring FrameworkSPR-10199 Spring 웹 애플리케이션 테스트를 위해 WebApplicationInitializer를 사용할 수있는 기능 추가

    Sam Brannen이 말한 것처럼 :

  3. from https://stackoverflow.com/questions/24175002/how-to-run-tests-using-a-custom-webapplicationinitializer by cc-by-sa and MIT license