You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Maven的test/resources下创建国际化属性文件是否为不良实践?

这种做法属于不良实践

是的,将main/resources下的messages.properties复制到test/resources的做法确实不妥,核心问题和弊端如下:

  • 测试失去有效性:你提到的点完全正确——这种测试验证的是测试目录下的副本,而非运行时实际使用的main/resources中的真实属性文件。一旦主目录的文件修改但测试副本没同步,就会出现“测试通过但生产环境消息错误”的情况,测试的意义荡然无存。
  • 增加维护成本:两份文件需要手动同步,长期来看很容易出现遗漏,尤其是多人协作场景下,谁都可能忘记更新测试目录的副本,引发不必要的排查成本。
  • 造成冗余混乱:重复的文件会增加项目的冗余度,也容易让团队成员困惑到底哪份才是“权威”文件,增加认知负担。

改进方案

可以通过以下方式避免复制,直接测试真实的国际化配置:

  • 利用Spring测试的默认资源加载:使用@SpringBootTest或@ContextConfiguration启动的Spring测试,默认会包含main/resources下的资源,无需额外配置就能直接读取主目录的messages.properties,测试逻辑直接对接真实运行时依赖。
  • 单独测试MessageSource:如果不需要启动完整Spring上下文,也可以手动初始化MessageSource并指定加载主目录的资源:
@Test
void testMessageResolution() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages"); // 自动加载classpath下的messages.properties,默认包含main/resources
    String message = messageSource.getMessage("user.not.found", new Object[]{"123"}, Locale.CHINA);
    assertEquals("用户ID 123 不存在", message);
}
  • Maven配置共享资源:如果测试阶段需要特殊的资源路径配置,可以在pom.xml中直接让测试阶段包含主目录资源,无需复制:
<build>
    <testResources>
        <testResource>
            <directory>src/main/resources</directory>
        </testResource>
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
    </testResources>
</build>

内容的提问来源于stack exchange,提问作者fernando1979

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:34:59