spring messagesource 正在测试
spring messagesource while testing
我在 java 配置中将消息源定义为:
@Bean(name = "messageSource")
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames(
"/i18n/ir/kia/industry/webapp/entity",
"/i18n/ir/kia/industry/webapp/formErrors",
"/i18n/ir/kia/industry/webapp/frontend",
"/i18n/ir/kia/industry/webapp/frontendPages");
return messageSource;
}
它在使用站点时工作正常并且消息显示正确,但是在尝试编写 spring 测试时使用 :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class, SpringMVC.class})
@WebAppConfiguration
public abstract class AbstractTestClass {
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
}
和一个简单扩展它的测试 class,我得到错误 Can't find bundle for base name /i18n/ir/kia/industry/webapp/entity
。
在启动 tomcat 和在 jsp 文件中使用消息源时它工作正常,但在测试时不走运。我试过将 i18n 文件夹移动到 WEB-INF 下,但它也没有帮助。
目标文件夹如下所示,请不要告诉我将 i18n 文件夹添加到目标资源...
我设法通过使用 spring 配置文件功能删除消息源基本名称来解决问题。我将消息源部分更改为:
@Bean(name = "messageSource")
@Profile(value = {"dev","prod"})
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames(
"/i18n/ir/kia/industry/webapp/entity",
"/i18n/ir/kia/industry/webapp/formErrors",
"/i18n/ir/kia/industry/webapp/frontend",
"/i18n/ir/kia/industry/webapp/frontendPages");
messageSource.setCacheSeconds(5);
return messageSource;
}
@Bean(name = "messageSource")
@Profile("test")
public MessageSource testMessageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
return messageSource;
}
并使用
将测试配置文件添加到我的测试单元
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class, SpringMVC.class})
@WebAppConfiguration
@ActiveProfiles("test")
public abstract class AbstractTestClass {
当我能够 运行 我的测试时,但这是解决问题的一种方法。我仍然对首先出现错误的原因感到困惑。
那是某种错误吗?或者我做错了什么?
我在 java 配置中将消息源定义为:
@Bean(name = "messageSource")
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames(
"/i18n/ir/kia/industry/webapp/entity",
"/i18n/ir/kia/industry/webapp/formErrors",
"/i18n/ir/kia/industry/webapp/frontend",
"/i18n/ir/kia/industry/webapp/frontendPages");
return messageSource;
}
它在使用站点时工作正常并且消息显示正确,但是在尝试编写 spring 测试时使用 :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class, SpringMVC.class})
@WebAppConfiguration
public abstract class AbstractTestClass {
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
}
和一个简单扩展它的测试 class,我得到错误 Can't find bundle for base name /i18n/ir/kia/industry/webapp/entity
。
在启动 tomcat 和在 jsp 文件中使用消息源时它工作正常,但在测试时不走运。我试过将 i18n 文件夹移动到 WEB-INF 下,但它也没有帮助。
目标文件夹如下所示,请不要告诉我将 i18n 文件夹添加到目标资源...
我设法通过使用 spring 配置文件功能删除消息源基本名称来解决问题。我将消息源部分更改为:
@Bean(name = "messageSource")
@Profile(value = {"dev","prod"})
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames(
"/i18n/ir/kia/industry/webapp/entity",
"/i18n/ir/kia/industry/webapp/formErrors",
"/i18n/ir/kia/industry/webapp/frontend",
"/i18n/ir/kia/industry/webapp/frontendPages");
messageSource.setCacheSeconds(5);
return messageSource;
}
@Bean(name = "messageSource")
@Profile("test")
public MessageSource testMessageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
return messageSource;
}
并使用
将测试配置文件添加到我的测试单元@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class, SpringMVC.class})
@WebAppConfiguration
@ActiveProfiles("test")
public abstract class AbstractTestClass {
当我能够 运行 我的测试时,但这是解决问题的一种方法。我仍然对首先出现错误的原因感到困惑。 那是某种错误吗?或者我做错了什么?