2014-12-02 2 views
2

스프링 용 MCU 컨트롤러를 테스트하기 위해 스프링 3.2.0에있는 스프링 테스트 프레임 워크를 사용하고 있습니다.mockmvc standalonesetup freemarker viewresolver 주입하는 방법?

나는 모든 변수를 완벽하게 제어 할 수 있도록 독립 실행 형 테스트 설정을 만들려고합니다. InternalResourceViewResolver로 작업하는 테스트가 있습니다. 하지만 지금은 내 템플릿 엔진으로 freemarker를 사용하려고하고 있으며 freemarker 구성을 독립 실행 형 설치에 콩으로 포함시키는 방법을 알 수 없습니다.

다음 클래스 : 나는 프리 마커 뷰 리졸버를 주입 할 수 있도록 내가 mockmvc에 문맥에 프리 마커 구성 콩을 추가 할 수있는 방법

org.springframework.web.util.NestedServletException: Request processing failed; 
nested exception is org.springframework.context.ApplicationContextException: 
Must define a single FreeMarkerConfig bean in this web application context (may be inherited): 
FreeMarkerConfigurer is the usual implementation. This bean may be given any name.; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [org.springframework.web.servlet.view.freemarker.FreeMarkerConfig] is defined 

:

@RunWith(MockitoJUnitRunner.class) 
public class StandAloneRegistrationControllerTest { 

private MockMvc mockMvc; 

@Mock 
private UserRegistrationService userRegistrationServiceMock; 

@Before 
public void setUp() { 
    mockMvc = MockMvcBuilders.standaloneSetup(new RegistrationController()) 
      .setViewResolvers(viewResolver()) 
      .build(); 
} 

private ViewResolver viewResolver() { 
    FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver(); 

    freeMarkerViewResolver.setCache(false); 
    freeMarkerViewResolver.setPrefix("/view/"); 
    freeMarkerViewResolver.setSuffix(".ftl"); 
    freeMarkerViewResolver.setContentType("text/html;charset=UTF-8"); 
    freeMarkerViewResolver.setRequestContextAttribute("rc"); 
    freeMarkerViewResolver.setExposeSpringMacroHelpers(true); 
    freeMarkerViewResolver.setExposeRequestAttributes(true); 
    freeMarkerViewResolver.setExposeSessionAttributes(true); 
    freeMarkerViewResolver.setAllowSessionOverride(true); 


    return freeMarkerViewResolver; 
} 

@Bean 
public FreeMarkerConfigurer freeMarkerConfigurer() { 
    FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); 
    configurer.setTemplateLoaderPath("/WEB-INF/"); 
    configurer.setDefaultEncoding("UTF-8"); 
    Properties settings = new Properties(); 
    settings.put("auto_import", "/view/layouts/layouts.ftl as layout,spring.ftl as spring"); 
    configurer.setFreemarkerSettings(settings); 

    return configurer; 
} 

@Test 
public void showAddTodoForm_ShouldCreateFormObjectAndRenderAddTodoForm() throws Exception { 
    mockMvc.perform(get("/register")) 
      .andExpect(status().isOk()); 

} 

} 

다음과 같은 예외를 제공합니다 독립 실행 형 설정?

답변

0

MockMVC에 익숙하지 않지만 setFreemarkerSettings 대신 FreeMarker Configuration을 사용해 보셨습니까?

예 :

@Bean 
public FreeMarkerConfigurer freeMarkerConfigurer(WebApplicationContext applicationContext) throws IOException, TemplateException { 
    FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); 

    freemarker.template.Configuration configuration = configurer.createConfiguration(); 
    configuration.addAutoInclude("/templates/include-common.ftl"); 
    configuration.setWhitespaceStripping(true); 

    configuration.setDefaultEncoding("UTF-8"); 
    configuration.setOutputEncoding("UTF-8"); 
    configuration.setURLEscapingCharset("UTF-8"); 
    configuration.setServletContextForTemplateLoading(applicationContext.getServletContext(), "/WEB-INF/ftl/"); 

    configurer.setConfiguration(configuration); 

    return configurer; 
} 
관련 문제