【问题标题】:maven test fails at a eastern language character while IDEA successmaven 测试在东方语言字符处失败,而 IDEA 成功
【发布时间】: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 失败的原因,以及如何解决这个问题?谢谢。

【问题讨论】:

    标签: java maven


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2014-03-08
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多