使用 "real" Thymeleaf 模板引擎测试代码,仅此而已
testing code with a "real" Thymeleaf template engine and nothing else
在我的 Spring 引导项目 (v2.6) 中,我的一个组件正在使用 Thymeleaf 模板引擎生成内容。
我想对我的组件进行单元测试,但我很挣扎,因为它有一个 TemplateEngine 作为构造函数依赖项:
public EmailNotifier(JavaMailSender emailSender,TemplateEngine templateEngine) {
this.emailSender = emailSender;
this.templateEngine=templateEngine;
}
我不想模拟 TemplateEngine(测试不会有很大价值),我更愿意使用“真实的”(和配置的)templateEngine,并确保内容按我的预期生成.但我希望我的测试尽可能“低级”,即不使用 Spring.
加载完整的应用程序
Spring Boot 没有像 Jpa 或 Web 测试那样的 Thymeleaf“切片”,但我想我需要类似的东西。
我怎样才能在我的测试中获得最小的 Spring 魔法,以便它既真实又快速?
这就是我最后做的事情:
@SpringBootTest
class EmailNotifierTest {
//to have Spring Boot manage the thymeleaf config
@EnableAutoConfiguration
@Configuration
static class MinimalConfiguration {
@Autowired
TemplateEngine templateEngine;
@Bean
public EmailNotifier notifier(){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("localhost");
mailSender.setPort(3025);
return new EmailNotifier(mailSender, templateEngine);
}
}
@Autowired
EmailNotifier myEmailNotifier;
//tests using myEmailNotifier go here...
}
我的对象已准备好使用,模板引擎由 Spring 配置,与 运行 在生产中配置时的方式相同。我想我们可以根据需要排除一些自动配置,以加快速度。但就我而言,我没有太多其他可用的依赖项,因此测试仍然很快 运行,这要归功于最小的 Spring 开销。
在我的 Spring 引导项目 (v2.6) 中,我的一个组件正在使用 Thymeleaf 模板引擎生成内容。
我想对我的组件进行单元测试,但我很挣扎,因为它有一个 TemplateEngine 作为构造函数依赖项:
public EmailNotifier(JavaMailSender emailSender,TemplateEngine templateEngine) {
this.emailSender = emailSender;
this.templateEngine=templateEngine;
}
我不想模拟 TemplateEngine(测试不会有很大价值),我更愿意使用“真实的”(和配置的)templateEngine,并确保内容按我的预期生成.但我希望我的测试尽可能“低级”,即不使用 Spring.
加载完整的应用程序Spring Boot 没有像 Jpa 或 Web 测试那样的 Thymeleaf“切片”,但我想我需要类似的东西。
我怎样才能在我的测试中获得最小的 Spring 魔法,以便它既真实又快速?
这就是我最后做的事情:
@SpringBootTest
class EmailNotifierTest {
//to have Spring Boot manage the thymeleaf config
@EnableAutoConfiguration
@Configuration
static class MinimalConfiguration {
@Autowired
TemplateEngine templateEngine;
@Bean
public EmailNotifier notifier(){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("localhost");
mailSender.setPort(3025);
return new EmailNotifier(mailSender, templateEngine);
}
}
@Autowired
EmailNotifier myEmailNotifier;
//tests using myEmailNotifier go here...
}
我的对象已准备好使用,模板引擎由 Spring 配置,与 运行 在生产中配置时的方式相同。我想我们可以根据需要排除一些自动配置,以加快速度。但就我而言,我没有太多其他可用的依赖项,因此测试仍然很快 运行,这要归功于最小的 Spring 开销。