【发布时间】: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 失败的原因,以及如何解决这个问题?谢谢。
【问题讨论】: