【发布时间】:2017-06-15 10:17:57
【问题描述】:
首先,应用程序编译运行成功。
我尝试在 Spring Boot 中对我的控制器进行单元测试。我的测试控制器看起来像:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { Application.class })
@Rollback
@Transactional
@WebMvcTest(PasswordResetController.class)
public class PasswordResetControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getPasswordForgetView() throws Exception {
this.mvc.perform(get("/password/forget"))
.andExpect(status().isOk());
}
}
这样我得到以下异常:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "password-forget-html", template might not exist or might not be accessible by any of the configured Template Resolvers
如果我调试配置,我发现它通过了我的WebMvcConfig.class,我将模板指向/WEB-INF/templates/ 文件夹:
@Configuration
@ComponentScan(basePackages = { "com.tmp" })
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Value("${mail.templates.cacheable}")
private boolean mailTemplatesCacheable;
@Value("${html.templates.cacheable}")
private boolean htmlTemplatesCacheable;
public static final String URL_RESOURCES = "/modules/**";
public static final String PATH_RESOURCES = "/modules/";
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(URL_RESOURCES).addResourceLocations(PATH_RESOURCES);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
@Bean
public TemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(htmlTemplatesCacheable);
return templateResolver;
}
@Bean
public TemplateResolver mailResolver() {
SpringResourceTemplateResolver result = new SpringResourceTemplateResolver();
result.setPrefix("/WEB-INF/mail/");
result.setSuffix(".html");
result.setTemplateMode("HTML5");
result.setCacheable(mailTemplatesCacheable);
result.setOrder(2);
result.setCharacterEncoding("UTF-8");
return result;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(templateResolver());
templateEngine.addTemplateResolver(mailResolver());
templateEngine.addDialect("java8time", java8TimeDialect());
templateEngine.addDialect("sec", springSecurityDialect());
templateEngine.addDialect("layout", thymeleafLayoutDialect());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
thymeleafViewResolver.setCache(false);
return thymeleafViewResolver;
}
// Dialect Beans
...
}
是的,文件夹中有模板。
有什么建议吗?提前致谢
【问题讨论】:
-
看起来
WebMvcConfig与测试无关。尝试将WebMvcConfig直接添加到@ContextConfiguration中。 -
如果我调试它,它会通过 WebMvcConfig 类
-
/WEB-INF/templates/在类路径中可见吗? -
我认为是这样,因为应用程序正在运行。这只是关于测试用例
标签: java spring spring-mvc spring-boot junit