Java maven测试在东方语言角色中失败,而IDEA成功
这是测试类:Java maven测试在东方语言角色中失败,而IDEA成功,java,maven,Java,Maven,这是测试类: @AutoConfigureTestDatabase @Sql(value = {"classpath:/ut_user_init.sql"}) public class UserControllerTest extends MockMvcTest { @Test @WithUserDetails(value = MockData.ADMIN_USERNAME, userDetailsServiceBeanName = "mockUserDetailsService
@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\u user\u 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>
utf-8
UTF-8
UTF-8
现在奇怪的是:如果我使用IDEA服务类返回一个查找结果,但是如果我使用mvn test-Dtest=path.to.TestClass
,它将失败,因为返回为null。但是如果我打印userRepository.findAll().size()
的结果,我可以看到它打印了sql文件中列出的正确数量的记录。我还尝试了打印userRepository.findOne(32L)
的结果,这两种语言都是MinGW(windows使用GDB表示东方语言,而源文件是UTF-8)和Linux为名称打印随机代码。虽然IDEA没有这个问题,但它返回结果并按原样打印出东方字符。为什么mvn和IDEA表现不同,是什么导致mvn失败,以及如何解决这个问题?谢谢。我猜当您从命令行运行时,它采用的是您的系统默认编码,可能不是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测试
执行您需要的操作,请参考此示例(部分
):