测试时弹出消息源

时间:2015-02-17 09:31:28

标签: java spring unit-testing spring-mvc spring-test-mvc

我在我的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;
}

使用网站并正确显示消息时可以正常工作,但在尝试使用以下方法编写弹出测试时

@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();
  }
}

和一个只是扩展它的测试类,我得到错误Can't find bundle for base name /i18n/ir/kia/industry/webapp/entity

它在启动tomcat并在jsp文件中使用消息源时工作正常,但在测试时没有运气。我试过在WEB-INF下移动i18n文件夹,但它也没有帮助它。

目标文件夹看起来像这样,请不要告诉我将i18n文件夹添加到目标资源...

enter image description here

1 个答案:

答案 0 :(得分:2)

我设法通过使用弹簧配置文件功能删除消息源基本名称来解决问题。我将消息源部分更改为:

@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 {

当我能够运行我的测试时,但这是一种解决问题的方法。我首先仍然对错误的原因感到困惑。 某种bug?或者我做错了什么?