2
我使用彈簧3.2.0中的彈簧測試框架來測試我的彈簧mvc控制器。mockmvc standalonesetup如何注入freemarker viewresolver?
我試圖創建一個獨立的測試設置,所以我對所有變量進行了全面控制。 我已經用InternalResourceViewResolver進行了測試。 但現在我試圖使用freemarker作爲我的模板引擎,我無法弄清楚如何將freemarker配置作爲bean包含到獨立設置中。
下面的類:
@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());
}
}
提供了以下異常:
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
我怎樣才能freemarker的配置Bean增加的背景下,這樣我可以注入freemarker的視圖解析器到mockmvc獨立設置?