maven 测试在东方语言字符处失败,而 IDEA 成功

Posted

技术标签:

【中文标题】maven 测试在东方语言字符处失败,而 IDEA 成功【英文标题】:maven test fails at a eastern language character while IDEA success 【发布时间】:2017-08-16 20:51:32 【问题描述】:

这是测试类:

@AutoConfigureTestDatabase
@Sql(value = "classpath:/ut_user_init.sql")
public class UserControllerTest extends MockMvcTest 
    @Test
    @WithUserDetails(value = MockData.ADMIN_USERNAME, userDetailsServiceBeanName = "mockUserDetailsService")
    public void testGetUser() throws Exception 

还有UserController类:

@RequestMapping("list")
public String list(Model model) 
   userService.findByName("[An Eastern character]")

UserService 类中:

User findByName(String name) 
     return userRepository.findByName(name); // name is in Eastern language.

这是ut_user_init.sql中的相关数据

INSERT INTO `user` VALUES ('32', '[The Eastern character]');

这是有效的pom.xml

<maven.compiler.encoding>utf-8</maven.compiler.encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

现在奇怪的是:如果我使用 IDEA,Service 类会返回一个查找结果,但如果我使用 mvn test -Dtest=path.to.TestClass,它会失败,因为返回为 null。但是如果我打印 userRepository.findAll().size() 的结果,我可以看到它打印了 sql 文件中列出的正确数量的记录。我还尝试在 MinGW(Windows 对东方语言使用 GDB,而源文件使用 UTF-8)和 Linux 打印 name 的随机代码时打印 userRepository.findOne(32L) 的结果。虽然 IDEA 没有这个问题,但它会返回结果并按原样打印东方字符。为什么 mvn 和 IDEA 的行为不同,以及导致 mvn 失败的原因,以及如何解决这个问题?谢谢。

【问题讨论】:

【参考方案1】:

我猜当您从命令行运行时,它会采用您的系统默认编码,可能不是 UTF-8。

试试这个:

mvn test -DargLine="-Dfile.encoding=UTF-8" -Dtest=MyTestClassName

【讨论】:

那行得通。但是为什么 mvn 不读取 pom.xml ,因为这三个属性现在都在 utf-8 中。以及为什么 pom.xml utf-8 配置不起作用?它们是否用于不同的目的,为什么 pom.xml utf-8 配置不起作用? 是的,那些 POM 属性与 file.encoding 不同。正如可能对您有所帮助的额外信息一样 - 有一种方法可以让 mvn test 做您需要的事情,请参阅此示例(&lt;systemProperties&gt; 部分):github.com/intuit/karate#test-reports

以上是关于maven 测试在东方语言字符处失败,而 IDEA 成功的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 调试器在调试 Maven 测试时跳过断点

在idea中,创建Maven工程后,写Java项目,测试时出现错误,怎么解决?

IDEA工程pom文件报错“plugin xx not found”!

IDEA开发工具,tomcat环境下启动maven项目失败,无法找到mapper目录下的xml文件

idea 用hg提交失败,编码出错

IntelliJ IDEA开发Spark的Maven项目Scala语言