まず、アプリケーションは正常にコンパイルされ、実行されています。Springのjunitテストテンプレートが存在しない可能性があります
私はスプリングブーツで私のコントローラをユニットテストしようとします。私は次の例外を取得し、これに
@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
...
}
はい、フォルダにはテンプレートがあります。
提案がありますか?
あなたは(クラス= {Application.class})の構成@ContextConfigurationの下に必要いけないような場合にのみ、コントローラをテストするために、スライスのテストを行っているすべての
のような作品です。 '@ ContextConfiguration'に' WebMvcConfig'を直接追加してみてください。 –
デバッグした場合、WebMvcConfigクラスを通過します –
'/ WEB-INF/templates /'はクラスパスに表示されていますか? –