Это тестовый класс:
@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
, он потерпит неудачу, потому что возврат будет нулевым. Но если я напечатаю результат userRepository.findAll().size()
, я вижу, что он печатает правильное количество записей, перечисленных в файле sql. И я также попытался напечатать результат userRepository.findOne(32L)
, как в MinGW (для Windows используются GDB для восточных языков, а исходные файлы - в UTF-8), а Linux печатает случайный код для name
. В то время как у IDEA нет этой проблемы, она возвращает результат, и он печатает восточный символ как есть. Почему mvn и IDEA ведут себя по-разному, и что вызвало неудачу mvn и как это решить? Спасибо.