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
做您需要的事情,请参阅此示例(<systemProperties>
部分):github.com/intuit/karate#test-reports以上是关于maven 测试在东方语言字符处失败,而 IDEA 成功的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ IDEA 调试器在调试 Maven 测试时跳过断点
在idea中,创建Maven工程后,写Java项目,测试时出现错误,怎么解决?
IDEA工程pom文件报错“plugin xx not found”!